在使用 css 关键帧动画中的 translate 2d 变换设置动画位置时,IE 10 和 Firefox 似乎都将元素捕捉到整个像素。
Chrome 和 Safari 没有,在动画细微动作时看起来要好得多。
动画是通过以下方式完成的:
@keyframes bobbingAnim {
0% {
transform: translate(0px, 0px);
animation-timing-function:ease-in-out
}
50% {
transform: translate(0px, 12px);
animation-timing-function:ease-in-out
}
100% {
transform: translate(0px, 0px);
animation-timing-function:ease-in-out
}
}
这是我的意思的一个例子:
只需在 Chrome 和 IE 10(或 Firefox)中打开它,您就会注意到运动流畅度的差异。
我意识到可能有很多因素会影响这种行为,例如元素是否使用硬件加速绘制。
有谁知道尝试强制浏览器始终在子像素上绘制元素的修复方法?
我发现了这个类似的问题,但答案是使用翻译变换制作动画,这正是我正在做的事情: CSS3 Transitions 'snap to pixel'。
更新: 玩了一会儿后,我找到了 Firefox 的修复程序,但在 IE 10 中没有做任何事情。诀窍是稍微缩小元素并在 Z 轴上使用 1px 偏移的 translate3d:
@keyframes bobbingAnim {
0% {
transform: scale(0.999, 0.999) translate3d(0px, 0px, 1px);
animation-timing-function:ease-in-out
}
50% {
transform: scale(0.999, 0.999) translate3d(0px, 12px, 1px);
animation-timing-function:ease-in-out
}
100% {
transform: scale(0.999, 0.999) translate3d(0px, 0px, 1px);
animation-timing-function:ease-in-out
}
}