#javascript #css #setinterval #getelementbyid #var
#javascript #css #setinterval #getelementbyid #var
Вопрос:
Я пытаюсь менять цвет контура элемента H1 каждые 2 секунды. Поэтому я использовал этот код JavaScript… Но он меняется с желтого на оранжевый только один раз и остается оранжевым все время. Что я могу сделать, чтобы он мерцал между двумя цветами? Пожалуйста, ответьте в терминах JS, а не в библиотеке jQuery
Вот мой код JavaScript, я новичок в JS :
var myVar = setInterval(function(){ colorFlicker() }, 2000);
function colorFlicker(){
var y = document.getElementById("mainH1");
y.style.outlineColor = y.style.outlineColor == "#ff944d" ? "#d9ff66": "#ff944d";
}
Ответ №1:
Не проверяйте наличие цветов в javascript, возвращаемый цвет зависит от браузера и часто имеет формат rgb(200,33,33)
или rgba(244,22,244,1)
или даже шестнадцатеричный в старых браузерах, вместо этого используйте флаг
var myVar = setInterval(colorFlicker, 500);
var flag = true;
function colorFlicker() {
var y = document.getElementById("mainH1");
y.style.outlineColor = flag ? "#d9ff66" : "#ff944d";
flag = !flag;
}
#mainH1 {outline: 2px solid #ff944d;}
<h1 id="mainH1">TEST</h1>
Комментарии:
1. можете ли вы объяснить словами, что делает флаг после того, как вы создаете переменную «y» в функции colorFlicker()?
2. Кто-нибудь может показать мне, как сделать то, что сделал adeneo с помощью оператора if, else, используя флаг? Это было действительно интересно, но, поскольку я новичок, я немного запутался в потоке управления.
3. Это то же самое, что и в коде, который у вас был, флаг запускается
true
и делаетflag = !flag
его обратным, поэтомуtrue
становитсяfalse
, а в следующий разfalse
становитсяtrue
и т. Д.
Ответ №2:
Изменения стиля должны обрабатываться с помощью CSS. Затем вы можете использовать JavaScript для безопасного переключения класса, который будет привязывать стиль CSS к вашим элементам:
/* css */
#mainH1 { outline: /* some color */ }
#mainH1.alternateColor { outline: /* some other color */ }
// JS
var y = document.getElementById("mainH1");
function colorFlicker(){
y.classList.toggle('alternateColor');
}
Ответ №3:
Используйте rgb()
цвет по умолчанию, затем адаптируйте свое условие :
var myVar = setInterval(colorFlicker, 1000);
function colorFlicker() {
var y = document.getElementById("mainH1");
y.style.outlineColor = y.style.outlineColor == "rgb(255, 148, 77)"?"#d9ff66":"rgb(255, 148, 77)";
}
h1 {
outline-style: dotted;
outline-color: rgb(255, 148, 77);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1 id='mainH1'>mainH1</h1>