【发布时间】:2012-09-14 02:16:11
【问题描述】:
前言
让我们假设一个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函数”等。
需要了解的一些事情
在this answer 我读到animation-fill-mode 受Chrome 16+、Safari 4+、Firefox 5+ 支持。
但 animation 单独 is supported by Chrome 1+ 和 Opera 也是。因此,即使不支持 fill-mode,使用 Modernizr 进行的一般测试也可能返回正值。
为了定位 animation-fill-mode,我在 Modernizr 上添加了一个新测试:
Modernizr.addTest('animation-fill-mode',function(){
return Modernizr.testAllProps('animationFillMode');
});
现在我有一个用于 CSS 的 .no-animation-fill-mode 类和用于 JavaScript 的 Modernizr.animationFillMode。
我还从CSS3 animations specs 读到:
文档样式表中指定的动画将从 文件加载
最后,问题
在确切的秒数动画结束时运行一个简单的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 */
或者对于animation-fill-mode 是否有任何已知的 特定 填充?
另外,如果我使用速记语法会发生什么
animation:myAnimation 2s 1s forwards;
在支持animation 但不支持animation-fill-mode 的浏览器上?
非常感谢!
【问题讨论】:
标签: jquery animation css modernizr polyfills