Jquery CSS3动画填充模式多边形填充 前言
让我们假设一个Jquery CSS3动画填充模式多边形填充 前言,jquery,animation,css,modernizr,polyfills,Jquery,Animation,Css,Modernizr,Polyfills,让我们假设一个div是从opacity:0设置的动画至不透明度:1我想保持不透明度:1动画结束后 这就是动画填充模式:向前可以 @keyframes myAnimation { from { opacity:0; } to { opacity:1; } } div { opacity:0; animation-name:myAnimation; animation-delay:1s; animation-duration:2s; anima
div
是从opacity: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>
现在我有了一个。没有用于CSS的动画填充模式
类和用于JavaScript的Modernizer.animationFillMode
我还从中读到:
文档样式表中指定的动画将从
文件加载
最后,问题
在动画结束的精确秒数上运行一个简单的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:myAnimation 2s 1s forwards;
在支持动画
但不支持动画填充模式
的浏览器上
非常感谢 我不知道有任何polyfill。。。
但我想说的是,您确实应该使用自己的自定义Modernizer测试,对于不支持动画填充模式的浏览器,您应该使用animationEnd
事件触发回调并将不透明度设置为1(或删除一个类)
见:
至于速记法,如果是我,我会尽可能选择更简单的方法。我会降低我的实现级别,这样我只使用普遍接受的东西。稍后,当这个特性得到更广泛的支持时,我会考虑实现它。我很少考虑使用一个具有<代码>的特性。这是一个实验技术在文档页面上广播-但是也许我应该被归类为无聊:< /P>
在您的示例中,您可以通过最初定义元素的结束状态并使用链接动画(如果需要动作之前的延迟)来实现与“动画填充模式:向前”相同的结果:
@关键帧等待和隐藏{
从{opacity:0;}
到{不透明度:0;}
}
@关键帧显示{
从{opacity:0;}
到{opacity:1;}
}
div{
不透明度:1;
动画:等待并隐藏2s 0s,显示2s 2s;
}
只是个测试
现在,速度较慢的浏览器可能会在再次隐藏元素状态之前刷新它们。但在我的经验中,我只在非常旧的机器上看到过这种情况,也只在需要呈现大量css的页面上看到过这种情况
显然,上面的内容会使css膨胀一点(因为您必须复制样式),并且在处理复杂的动画时会更加复杂。然而:
它应该适用于几乎任何动画情况
这将避免对JavaScript的需要(除了$().fadeIn回退)
它将在所有支持css动画的浏览器上运行
您不会有JS和CSS不同步的风险
关于使用短表单,如果您希望尽可能实现广泛的浏览器兼容性,最好不要这样做。然而,正如我上面的例子所示,我选择使用简短的形式,因为它们更清晰,我可以理解不想一直写(或读)冗长的版本。出于这个原因,我建议使用较少的代码生成css:
仅供参考,以下是我现在如何实施pebbl的答案(这是一个非常聪明的答案)。我只需要的css动画检测
让我们假设我想滑动并淡出此div:
<div class="target">Some stuff</div>
然后是一个新的班级
.target-animation {
height:0; opacity:0; // same as "100%" state
animation:byebye 750ms 1;
}
移动到javascript:
// $('.whatever').on('click',function(){ ...
if(Modernizr.cssanimations)
// css animations are supported!
$('.target').addClass('target-animation');
else
// i hate you IE
$('.target').animate({height:0,opacity:0},750);
如果需要多次触发动画,只需使用javascript删除该类,如下所述:
似乎…好吃:-)有关于速记语法的事吗?不要用它,我会说。。。需要进一步测试;-)嗯,我需要确定,因为它在处理多个动画时非常有用,其中一个必须保持最终状态,另一个不能。无论如何,非常感谢,你的答案非常有用!但我会再等几天,然后再分配赏金。感谢lotUse-webkit背面可见性:隐藏;防止浏览器闪烁conent
@keyframes byebye {
0% { height:100px; opacity:1; }
100% { opacity:0; height:0; }
}
.target-animation {
height:0; opacity:0; // same as "100%" state
animation:byebye 750ms 1;
}
// $('.whatever').on('click',function(){ ...
if(Modernizr.cssanimations)
// css animations are supported!
$('.target').addClass('target-animation');
else
// i hate you IE
$('.target').animate({height:0,opacity:0},750);
// if(Modernizr.cssanimations) ...
$('target').addClass('target-animation').on('webkitAnimationEnd oAnimationEnd oanimationend animationend msAnimationEnd',function(){
$(this).removeClass('target-animation')
// don't forget to .hide() if needed
});
// ... else