Я пытаюсь плавно закрасить элементы границы серым с помощью сглаживания 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"
}
}
Я попробовал все, что мог сделать
Вместо этого я использовал серые значки, чтобы они были не в фокусе;)
Вы играли с CSS box-shadow, где оси x и y установлены на 0, а радиус распространения установлен, например, 2 или 3, что может дать вам плавный вид, к которому вы стремитесь. Вы можете использовать как сплошную рамку толщиной 1 пиксель, так и тень блока, задав только радиус для растушевки границы.
Вы можете попробовать вот так.
document.getQuerySelectorAll
вместо document.getQuerySelectorAll
. (ссылка: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll)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"
})
}
как это отвечает на вопрос? рефакторинг кода не добавляет ничего, чего еще нет в ОП. Ответы должны решать проблему, а не игнорировать ее, а просто проводить рефакторинг.
Решения, которые я дал в пунктах 1 и 2, кажутся решениями.
Вы ничего не изменили. Вы только что провели рефакторинг, чтобы сделать код короче!
1: getQuerySelectorAll
-> querySelectorAll
. Вот это я поменял..:)
for (var i = 0; elms[i]; i++)
-> for (var i = 0; i < elems.length; i++)
Это то, что я предложил в разделе 2. Причина, по которой я упомянул forEach, — просто показать другой способ. Вас может смутить то, что это похоже на рефакторинг.
да, изменение, это просто рефакторинг, не меняющий проблему, которую описывает ОП в первую очередь
Я думаю, что его изменение может решить проблему, потому что document.getQuerySelectorAll
не существует.
ты уверен или догадываешься? Обратите внимание: мы говорим о фреймворке Electron, а не о ванильном JS. Если да, дайте ссылку на официальную документацию, чтобы подтвердить свой ответ.
Затем изменение условия цикла for на i < elms.length
может решить проблему. Если elms[i]
находится в условии условия, цикл for может никогда не закончиться. О getQuerySelectorAll
найду позже
Извините, но мне не удалось найти информацию о getQuerySelectorAll
с помощью быстрого поиска в Google. Было несколько неофициальных сообщений в блогах и вопросов о переполнении стека, в которых упоминался getQuerySelector
, но большинство из них, похоже, были опечатками для querySelector
. Если вы найдете какие-либо надежные ссылки, будем очень признательны, если поделитесь ими в комментариях.
Кажется, я не понял вашего вопроса. Вы пытаетесь изменить цвет фона элементов класса .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
});
}
getQuerySlectorAll
является чем-то электронно-специфичным? Почему бы просто не использоватьdocument.querySelectorAll('.border').forEach(elms => elms.style.backgroundColor = '#AAA')
? Или почему бы просто не решить эту проблему с помощью CSS-селектора.border { background-color: #AAA }
?