请查看我的最终编辑!
是否可以在不让动画在帧之间缓动的情况下使用CSS3动画?
例如,我有一张图片,上面有两个字符动画精灵。它们平均间隔50px。当我使用以下动画时,仍然会出现缓动(虽然非常快,以便看起来像闪烁)。
#ball .animated{
-webkit-animation-name: animate;
-webkit-animation-duration: .5s;
-webkit-animation-iteration-count: infinite;
-webkit-animation-direction: alternate;
-webkit-animation-timing-function: linear;}
@-webkit-keyframes animate{
0%{-webkit-transform: translate3d(0,0,0);}
49%{-webkit-transform: translate3d(0,0,0);}
50%{-webkit-transform: translate3d(-50px,0,0);}
100%{-webkit-transform: translate3d(-50px,0,0);}
根据上述内容,精灵帧应该在图像的第一部分(x = 0px)持续0-49%的时间,然后跳转到图像的第二部分(x = -50px),持续50-100%。然而,1%的差异仍足以在视觉上看到从0到-50px的缓动效果。
您有什么想法?
编辑:
-webkit-animation-timing-function: cubic-bezier(1,0,1,0);
上述方法似乎有点解决了问题,但过一会儿又开始闪烁。
编辑:
我没有意识到百分比可以使用小数。将间隔从1%缩小到0.1%,可以创建一个更快的补间动画,几乎不可见(当 -webkit-animation-duration:
< 1s; 时)。
0%{-webkit-transform: translate3d(0,0,0);}
49.9%{-webkit-transform: translate3d(0,0,0);}
50%{-webkit-transform: translate3d(-50px,0,0);}
100%{-webkit-transform: translate3d(-50px,0,0);}
最终编辑!:
根据我的发现,Webkit动画百分比可以接受小数点后六位的十进制数(例如0.0001)。在相对较快的动画计时器上,这将导致瞬间转换。虽然有点取巧,但却是行之有效的方法。
示例:
@-webkit-keyframes sprite {
0% {
-webkit-transform: translate3d(0,0,0);
}
50% {
-webkit-transform: translate3d(0,0,0);
}
50.0001%{
-webkit-transform: translate3d(-50px,0,0);
}
100%{
-webkit-transform: translate3d(-50px,0,0);
}
}
上面的例子是一个包含100px图片的示例(图像上的每个精灵都是50px宽),放在一个容器div中,该容器的
width: 50px
和overflow:hidden
属性只显示一张图片。注意:我使用translate3d,因为在移动浏览器中它是硬件加速的,而translateX、translateY和translateZ目前还没有硬件加速。