在jQuery动画期间防止固定位置元素闪烁

时间:2013-08-12 11:24:09

标签: jquery jquery-animate css-position flicker

这个问题适用于普通的jQuery和jQuery Mobile网站,因为我目前正在处理其中一个问题。这当然只是移动设备上的一个问题,至少是iPhone 4。

很简单,标题设置为position: fixed; top: 0;。当我使用jQuery animate()函数时,无论是滚动到特定元素还是页面顶部,标题都会从屏幕顶部向上和向下跳跃,就像它无法跟上滚动一样页。

这仅仅是移动设备的硬件限制,还是我可以做些什么来消除或至少减少这种情况?

3 个答案:

答案 0 :(得分:27)

我遇到了同样的问题,它似乎是一个错误,当页面内部发生太多事情时,我可以通过将以下转换代码添加到固定位置元素来修复它,({{ 1}})强制浏览器使用硬件加速来访问设备的图形处理单元(GPU)以使像素飞行。另一方面,Web应用程序在浏览器的上下文中运行,这使得软件可以完成大部分(如果不是全部)渲染,从而减少了转换的马力。但是Web一直在追赶,大多数浏览器厂商现在通过特定的CSS规则提供图形硬件加速。

使用-webkit-transform:translate3d(0,0,0);将使GPU转换为CSS转换的动作,使它们更平滑(更高的FPS)。

注意: translate3d(0,0,0)在您看到的内容方面没有任何效果。它在x,y和z轴上移动对象0px。这只是一种强制硬件加速的技术。

transform: translateZ(0);-webkit-transform: translateZ(0);

答案 1 :(得分:0)

移动浏览器对固定元素的支持非常有限,您需要选择绝对位置+ JS解决方案,这里有一个关于该主题的有趣article

我为我的移动网站修复它的方式,我根据滚动的距离重新调整固定元素的顶部。

P.s:如果您使用js(视差,锚标签动画......)模拟滚动,如果元素是固定的,则在用户物理滚动几个像素之前,它不会被点击。在ios上知道 bug

答案 2 :(得分:0)

另外,当我将div设置为position:fixed和top:0时,我也遇到了类似的问题;当我在Android手机上测试移动应用程序时,当我开始向上滚动时,div的底部会闪烁。所以要解决/破解它,我将高度:1000px而不是100%设置为溢出:隐藏。现在div不再闪烁了。