Это (очевидно) часть более крупного проекта, но я пытаюсь вызвать переход CS на setTimeout
.JavaScript: Trigger CSS Transition с window.setTimeout
(Я знаю об использовании анимации CSS, но речь идет не только о повторных переходах).
Переход CSS произойдет, когда свойство изменится. Для моих собственных целей я использую setAttribute
, поскольку это изолирует поведение других материалов, связанных с классом, но поведение ниже работает одинаково.
Предполагая, что HTML и другой код находится в месте, здесь упрощенная версия:
var test=document.querySelector('div#test');
window.setInterval(doit,4000);
function doit() {
test.removeAttribute('thing');
test.innerHTML=new Date();
test.setAttribute('thing',null);
}
CSS-это:
div#test {
opacity: 0;
}
div#test[thing] {
transition: opacity 1s;
opacity: 1;
}
Хитрость Я пытаюсь это изменить ясно атрибут, а затем установите его снова - это должно вызвать изменение CSS. Это не работает, как указано выше. Тем не менее, если задержать установки attribut на 0 секунд, он делает работу:
function doit() {
test.removeAttribute('thing');
window.setTimeout(function() {
test.setAttribute('thing',null);
},0);
test.innerHTML=new Date();
}
вопрос: почему она не работает, если я не добавить эту ничтожную задержку, и есть лучший способ сделать это ?
Я хотел бы ответить без jQuery.
Примечание: Я принял ответ ниже. Следующий код будет работать:
function doit() {
test.removeAttribute('thing');
test.offsetHeight; // force update
test.innerHTML=new Date();
test.setAttribute('thing',null);
}
Благодарности
У меня была аналогичная проблема, пытающаяся изменить URL с местоположением (это было с угловым, но я думаю, что это просто оболочка). Я изменил значения location.search и перенаправил страницу непосредственно после. При использовании функции «назад» в браузере последняя страница не отражает измененный параметр «поиск», если я не переадресовал перенаправление в течение таймаута. Я не знаю, почему, но похоже, что так оно и есть, не нашел для него хорошего ответа, по крайней мере. – Millenjo