我试图在Android WebView中使用CSS3动画,但我在开始动画时得到一个非常烦人的延迟(大约500毫秒)。
动画运行平稳,没有延迟,但在开始时有延迟。由于没有延迟,我认为这不是性能问题。还是有可能?
它不是默认的300ms onclick延迟,我已经更改为ontouchstart,当我做动画/过渡以外的任何事情时,没有延迟。只有这两个。
这也不是animation-delay属性,我已经把它设置为0了
有什么可能的解释/解决方案吗?
PS:我试图运行的动画/过渡是与transform: translateX()
属性。之前,我尝试用left: Xpx
,但它在动画期间滞后。对于transform,没有延迟,但是有延迟。
我也遇到过同样的问题,但没能找到合理的解决方案。我尝试了不同的方法,以下是我的结论:
- 使动画更长使其看起来更平滑,但不能减少开始时的延迟
- 关闭硬件加速使动画更快(延迟也减少),但一些帧被丢弃,动画不再平滑
- 将所有
translate3d
变为translateX
/translateY
/translateZ
-无视觉差异 - 将动画更改为通过JavaScript (
transitionEnd
事件)控制的多个过渡,使其更慢,途中有多个打嗝(每次当transitionEnd
被触发时)。
我的猜测是CSS动画只是在Android上很慢,需要一些预计算来显示它们;因此一开始就耽搁了。我们可能需要等待Chrome成为Android的默认浏览器。
我不确定它是否有助于延迟,但也许你应该使用translate3d(x,0,0)
而不是translateX
,因为3D转换在硬件上运行。
我现在找不到参考资料,但我记得在Google Android HTML开发者网站上读过一篇关于它的文章。
我在股票浏览器上也有同样的问题。你可以把这个添加到你要制作动画的块中:
-webkit-backface-visibility: hidden;
-webkit-perspective: 1000;
这应该平滑动画,使它们更早开始,并消除动画前后的闪烁