jquery – CSS3动画填充模式polyfill

前端之家收集整理的这篇文章主要介绍了jquery – CSS3动画填充模式polyfill前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
前言

让我们假装一个div是不透明度的动画:0;不透明度:1;我想保持不透明度:1;动画结束后

这就是动画填充模式:转发;确实.

@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>​

Run it on jsFiddle

>注1:我没有包含供应商前缀来简化
>注2:这只是一个例子,请不要回答“只使用jQuery fadeIn函数”等

有些事情要知道

this answer,我看到Chrome 16,Safari 4,Firefox 5支持动画填充模式.

但是动画独自is supported by Chrome 1和Opera也是.因此,即使不支持填充模式,Modernizr的一般测试也可能返回正.

要瞄准动画填充模式,我在Modernizr上添加了一个新的测试:

Modernizr.addTest('animation-fill-mode',function(){
    return Modernizr.testAllProps('animationFillMode');
});

现在我有一个.no-animation-fill-mode类为CSS和Modernizr.animationFillMode为JavaScript.

我也从CSS3 animations specs读到:

an animation specified in the document style sheet will begin at the
document load

最后,这个问题

在动画结束的确切秒数下运行一个简单的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:myAnimation 2s 1s forwards;

支持动画但不是动画填充模式的浏览器上?

非常感谢!

解决方法

如果是我,我会尝试选择更简单的选择 – 如果可能的话.我会降级我的实现,以便我只使用通常被接受的.后来,当功能得到更广泛的支持时,我会考虑实现它.我很少考虑使用这个功能这是在文档页面上播放的实验技术 – 但是也许我应该被归类为无聊:)

在您的示例中,您可以通过定义最初的元素的结束状态,并使用链接的动画(如果在需要该动作之前有延迟),可以获得与animation-fill-mode相同的结果:forward

@keyframes waitandhide {
  from { opacity:0; }
  to { opacity:0; }
}
@keyframes show {
  from { opacity:0; }
  to { opacity:1; }
}
div {
  opacity:1;
  animation: waitandhide 2s 0s,show 2s 2s;
}
<div>just a test</div>​

http://jsfiddle.net/RMJ8s/1/

现在,较慢的浏览器可能会将您的初始元素状态闪烁,再次隐藏它们.但是根据我的经验,我只看到这些在很老的机器上,并且有大量的css渲染页面.

显然,上面这些会使你的css更多一些(因为你必须重复样式),而且在处理复杂的动画时会更复杂.然而:

>它应该适用于几乎任何动画情况.
>它将避免需要JavaScript(保存$().fadeIn fallback).
>它将适用于支持css动画的所有浏览器.
>您不会遇到JS / CSS变得不同步的风险.

关于使用短格式,最好不要如果你想要尽可能广泛的浏览器兼容性.然而,如我上面的例子所示,我选择使用短格式,因为它们更清晰,我可以理解不想长时间写(或阅读)长时间的版本.因此,我建议使用较少的生成您的css:

http://lesscss.org/

http://radiatingstar.com/css-keyframes-animations-with-less

猜你在找的jQuery相关文章