Как сделать элементы серыми на основе имени класса?

Я пытаюсь плавно закрасить элементы границы серым с помощью сглаживания CSS, но это ничего не дает, а толщина элементов составляет 1 пиксель.

код:

        function greyBorder()
        {
            var elms
            elms = Array.from(document.getQuerySelectorAll(".border"))
            for (var i = 0; elms[i]; i++)
            {
                elms[i].style.backgroundColor = "#aaaaaa"
            }
            
        }

        function ungreyBorder()
        {
            var elms
            elms = Array.from(document.getQuerySelectorAll(".border"))
            for (var i = elms.length - 1; i >= 0; i--)
            {
                elms[i].style.backgroundColor = "#2832be"
            }
        }

Я попробовал все, что мог сделать

getQuerySlectorAll является чем-то электронно-специфичным? Почему бы просто не использовать document.querySelectorAll('.border').forEach(elms => elms.style.backgroundColor = '#AAA')? Или почему бы просто не решить эту проблему с помощью CSS-селектора .border { background-color: #AAA }?

tacoshy 13.07.2024 15:49

Вместо этого я использовал серые значки, чтобы они были не в фокусе;)

Ashton Drye 13.07.2024 15:51

Вы играли с CSS box-shadow, где оси x и y установлены на 0, а радиус распространения установлен, например, 2 или 3, что может дать вам плавный вид, к которому вы стремитесь. Вы можете использовать как сплошную рамку толщиной 1 пиксель, так и тень блока, задав только радиус для растушевки границы.

dale landry 13.07.2024 18:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете попробовать вот так.

  1. Используйте document.getQuerySelectorAll вместо document.getQuerySelectorAll. (ссылка: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll)
  2. for (var i = 0; elms[i]; i++) -> for (var i = 0; i < elms.length; i++)

или вы можете использовать forEach для итерации, вот так.

        function greyBorder()
        {
            const elems = [...document.querySelectorAll(".border")];
            elems.forEach((elem) => {
                elem.style.backgroundColor = "#aaaaaa"
            })
            
        }

как это отвечает на вопрос? рефакторинг кода не добавляет ничего, чего еще нет в ОП. Ответы должны решать проблему, а не игнорировать ее, а просто проводить рефакторинг.

tacoshy 13.07.2024 16:05

Решения, которые я дал в пунктах 1 и 2, кажутся решениями.

Seojin Kim 13.07.2024 16:08

Вы ничего не изменили. Вы только что провели рефакторинг, чтобы сделать код короче!

tacoshy 13.07.2024 16:09

1: getQuerySelectorAll -> querySelectorAll. Вот это я поменял..:)

Seojin Kim 13.07.2024 16:11
for (var i = 0; elms[i]; i++) -> for (var i = 0; i < elems.length; i++) Это то, что я предложил в разделе 2. Причина, по которой я упомянул forEach, — просто показать другой способ. Вас может смутить то, что это похоже на рефакторинг.
Seojin Kim 13.07.2024 16:13

да, изменение, это просто рефакторинг, не меняющий проблему, которую описывает ОП в первую очередь

tacoshy 13.07.2024 16:20

Я думаю, что его изменение может решить проблему, потому что document.getQuerySelectorAll не существует.

Seojin Kim 13.07.2024 16:24

ты уверен или догадываешься? Обратите внимание: мы говорим о фреймворке Electron, а не о ванильном JS. Если да, дайте ссылку на официальную документацию, чтобы подтвердить свой ответ.

tacoshy 13.07.2024 16:26

Затем изменение условия цикла for на i < elms.length может решить проблему. Если elms[i] находится в условии условия, цикл for может никогда не закончиться. О getQuerySelectorAll найду позже

Seojin Kim 13.07.2024 16:29

Извините, но мне не удалось найти информацию о getQuerySelectorAll с помощью быстрого поиска в Google. Было несколько неофициальных сообщений в блогах и вопросов о переполнении стека, в которых упоминался getQuerySelector, но большинство из них, похоже, были опечатками для querySelector. Если вы найдете какие-либо надежные ссылки, будем очень признательны, если поделитесь ими в комментариях.

Seojin Kim 13.07.2024 16:51

Кажется, я не понял вашего вопроса. Вы пытаетесь изменить цвет фона элементов класса .border на серый (#aaaaaa), а затем обратно на синий (#2832be), используя функции JavaScript greyBorder() и ungreyBorder()?

Если вы хотите плавно изменить цвет фона, а не резко, я бы посоветовал вам использовать переходы CSS.

.border {
  border: 1px solid black; 
  transition: background-color 0.3s ease; 
}

.grey {
  background-color: #aaaaaa;
}

.blue {
  background-color: #2832be; 
}

function greyBorder() {
  var elms = Array.from(document.querySelectorAll(".border"));
  elms.forEach(function(elm) {
    elm.classList.add("grey"); // Add class to apply gray background
  });
}

function ungreyBorder() {
  var elms = Array.from(document.querySelectorAll(".border"));
  elms.forEach(function(elm) {
    elm.classList.remove("grey"); // Remove class to revert to blue 
     background
  });
}

Другие вопросы по теме