Изменить: JSFiddle по запросу: https://jsfiddle.net/5anz0kgt/1/
Редактировать 2: кажется, что прерывание анимации на самом деле связано с порядком элементов... Если новый слой banenr находится поверх старого, анимация будет плавной. Если новый баннер находится внизу, анимация будет прерывистой. Таким образом, возникает новый вопрос, почему и как я могу это исправить?
В настоящее время я заканчиваю небольшой баннер, и у меня проблемы с анимацией.
Изначально у меня были только следующие функции, управляющие видимостью баннера и анимацией (которые работали):
function fadeOut(el){
el.style.transition = "opacity 0.5s linear 0s";
el.style.opacity = 0;
}
function fadeIn(el){
el.style.transition = "opacity 0.5s linear 0s";
el.style.opacity = 1;
}
Но я быстро заметил, что это (конечно) сделало кнопки на баннерах ненажимаемыми из-за наложения элементов.
Поэтому я решил установить display: none для невидимых слоев баннера. Для затухания я просто добавил
el.style.display = "";
но для затухания мне нужно было убедиться, что анимация CSS завершена, прежде чем я смогу скрыть слой. Поэтому я добавил (любезно предоставлено http://davidwalsh.name/css-animation-callback):
var transitionEvent = whichTransitionEvent(el);
transitionEvent && el.addEventListener(transitionEvent, function() {
el.style.display = "none";
});
до конца функции fadeOut(). Проблема сейчас в том, что переход теперь очень резкий (большую часть времени - кажется, работает небольшое подмножество времени).
Работает только код отображения в fadeIn(), указывая на изменения в fadeOut() как на проблему. Однако, наблюдая в firebug, я вижу, что изменения отображения вступают в игру только после завершения анимации непрозрачности.
Как я могу гарантировать, что мой код отображения не прерывает анимацию, или, альтернативно, как еще я могу решить проблему наложения элементов?