Webkit的CSSanimation问题 – 坚持animation的结束状态?
鉴于以下CSS3animation….
<style type="text/css" media="screen"> .drop_box { -webkit-animation-name: drop; -webkit-animation-duration: 2s; -webkit-animation-iteration-count: 1; } @-webkit-keyframes drop { from { -webkit-transform: translateY(0px); } to { -webkit-transform: translateY(100px); } } </style> <div class="drop_box"> Hello world </div>
世界您好世界文本animation如预期下降100px。 但是,在animation结束时,它会跳回原来的位置。
显然这在CSSland中是有意义的。 animation已经被应用,不再作用于元素,所以原始样式生效。 这对我来说似乎有点奇怪 – 当然,如果一个animation元素到位,那么人们会期望放置持续?
有没有什么办法让结束位置“粘性”,而不必诉诸于JavaScript来标记一个类名或样式到animation结尾的元素来修复其改变的属性? 我知道转换依然存在 ,但对于我所讨论的animation(这个例子只是为了演示的目的)转换并不能提供所需的控制级别。 如果没有这个,看起来复杂的animation只能用于元素最终回到原始状态的循环过程。
如果你在类中定义了最终状态,那么它应该在这个例子中做你想做的事情:
.drop_box { -webkit-transform: translateY(100px); -webkit-animation-name: drop; -webkit-animation-duration: 2s; -webkit-animation-iteration-count: 1; }
但是如果你的animation无论如何都是事件驱动的,你可能最终不得不使用一些JavaScript。 最简单的方法是添加具有结束状态的类,从而触发animation的启动。
– 编辑
有关2012年4月WD添加的animation-fill-mode
属性的信息,请参阅迪诺的答案 。
您可以使用-webkit-animation-fill-mode来保持结束状态(或者甚至向后延伸启动状态)。 它刚刚被添加到WebKit,并在iOS 4和Safari 5中发货。
-webkit-animation-fill-mode: forwards;
只需要在这里添加好的答案,您可以使用一个JavaScript框架,如jQuery Transit ,为您处理CSS3转换。
根据你将要做的转换/效果的多less,这可能是一个更好的解决scheme,保持你的代码干净,而不是跟上一个大的CSS文件,其中包含所有的效果。
这是一个非常简单的完成你想要的任务:
使用Javascript:
$(".drop_box").transition({y: "+=100px"}, 2000);
JS小提琴演示
我想你可能要找的是:
0% { -webkit-transform: translateY(0px); } 100% { -webkit-transform: translateY(100px); }
这应该把它放在正确的地方。
还有另外一个方法可以做到这一点,
<style type="text/css" media="screen"> .drop_box { position:absolute; top:100px; -webkit-animation-name: drop; -webkit-animation-duration: 2s; -webkit-animation-iteration-count: 1; } @-webkit-keyframes drop { from { -webkit-transform: translateY(-100px); } to { -webkit-transform: translateY(0px); } } </style> <div class="drop_box"> Hello world </div>