Введение
Предположим, что a div
анимируется от opacity:0;
до opacity:1;
, и я хочу сохранить opacity:1;
после окончания анимации.
Что делает animation-fill-mode:forwards;
.
@keyframes myAnimation {
from { opacity:0; }
to { opacity:1; }
}
div {
opacity:0;
animation-name:myAnimation;
animation-delay:1s;
animation-duration:2s;
animation-fill-mode:forwards;
}
<div>just a test</div>
- Примечание 1: я не включил префиксы поставщика для упрощения
- Примечание 2: это просто пример, пожалуйста, не отвечайте "просто используйте функцию jQuery fadeIn" и т.д.
Некоторые вещи, чтобы знать
В этом ответе я читал, что animation-fill-mode
поддерживается браузерами Chrome 16+, Safari 4+, Firefox 5 +.
Только animation
поддерживается Chrome 1+ и Opera. Таким образом, общий тест с Modernizr может возвращать положительный результат, даже если fill-mode
не поддерживается.
Чтобы настроить таргетинг на animation-fill-mode
, я добавил новый тест на Modernizr:
Modernizr.addTest('animation-fill-mode',function(){
return Modernizr.testAllProps('animationFillMode');
});
Теперь у меня есть класс .no-animation-fill-mode
для CSS и Modernizr.animationFillMode
для JavaScript.
Я также читал из спецификации анимации CSS3, которые:
анимация, указанная в таблице стилей документа, начнется с загрузка документа
Наконец, вопрос (ы)
Можно ли запустить простую функцию jQuery с точным количеством секунд окончания анимации
$(document).ready(function(){
if(!Modernizr.animation){
$('div').delay(1000).fadeIn(2000);
}else if(!Modernizr.animationFillMode){
$('div').delay(3000).show();
}
});
И в CSS:
.no-animation-fill-mode div {
animation-iteration-count:1;
}
/* or just animation:myAnimation 2s 1s 1; for everyone */
Или существует ли какой-либо известный polyfill для animation-fill-mode
?
Кроме того, что произойдет, если я использую сокращенный синтаксис
animation:myAnimation 2s 1s forwards;
в браузерах, поддерживающих animation
, но не animation-fill-mode
?
Спасибо большое!