为啥我的 jQuery 动画在基于 webkit 的浏览器中不稳定?

Posted

技术标签:

【中文标题】为啥我的 jQuery 动画在基于 webkit 的浏览器中不稳定?【英文标题】:Why are my jQuery animations choppy in webkit-based browsers?为什么我的 jQuery 动画在基于 webkit 的浏览器中不稳定? 【发布时间】:2012-01-22 11:15:08 【问题描述】:

我正在处理一个非常简单的动画:向左滑动一行图像:

$('#button').click(
    function() 
        $('div#gallery').animate(scrollLeft:'+=800px', 1000);
    
);

(它应该是一个图片库;我隐藏了溢出以一次只显示一张图片。)

不管怎样,尽管尝试了各种缓动参数,即使速度很慢,动画在 Chrome 和 Safari 中非常不稳定,但在 Internet Explorer 和 Firefox 中始终流畅。 (网上提出的大多数问题都是关于 IEFirefox 不稳定!)

我找到了原因,对我来说。这是一个非常特殊的情况,可能不适用于大多数人,但无论如何它可能会对某人有所帮助。我将在下面发布我的答案。 (我认为网站指南允许这样做。)

【问题讨论】:

是的,理想情况下,如果/当您解决自己的问题时,您将其发布在下方并“接受”您自己的答案...只要它是本网站的主题并且足够清晰以提供帮助未来的读者。我唯一的建议是您在上面的问题中发布一个示例和代码,以提供更多上下文。 【参考方案1】:

对我来说,如果是 24 位 PNG、8 位 PNG、GIF、JPEG 等,这并没有什么不同,如果屏幕上有大图像,我的动画就会出现问题。如果您在大图像上方有元素 z-index,请尝试将此 CSS 添加到您的元素:

-webkit-transform: translateZ(0);

对我来说,它有效,但它留下了动画伪影。

最终为我解决的只是简单地改变它:

$('#myimage').animate(
    height: 0,
    top: '-=50'
, 500, 'linear');

到这里:

$('#myimage').animate(
    height: '-=1'
, 1, 'linear').animate(
    height: 0,
    top: '-=50'
, 500, 'linear');

我只是在开头添加了一个 1 毫秒的小动画。我的想法是它可能会为即将出现的真正动画“准备”Chrome,并且它奏效了。为了安全起见,您可能需要将其更改为 20 或 50 毫秒。

【讨论】:

感谢加文。 -webkit-transform: translateZ(0);也解决了我的问题。感谢分享真的很有帮助。 +1,-webkit-transform: translateZ(0); 上的 9 个月仍然对我有帮助。谢谢。【参考方案2】:

在我的例子中,问题不在于代码,而在于图像——特别是通过 css 宽度属性(强制)缩小的大图像。当然,较大的图像可能需要更多的处理来制作动画,但 IE 和 FF 似乎可以很好地按比例缩小它们(在我的例子中,2000px 宽的图像被缩放为 800px 宽)。与此同时,Chrome 和 Safari 似乎陷入了为此类图像制作动画的困境。一旦我在 Photoshop 中将我的所有图像批量缩小到实际上为 800 像素宽,动画到处都很流畅。

其他细节。我正在使用 jQuery 1.7。我遇到了为 img 元素本身以及带有背景图像的 div 元素设置动画的问题。

【讨论】:

超级老线程,我知道,但我在 Chrome 上遇到了同样的问题。问题是,我的图像是根据窗口大小动态缩放的。有什么建议吗?【参考方案3】:

我意识到这个线程很旧,但是为了高效编码...,我最近遇到了一个类似的问题,即使用 Chrome 的动画断断续续,在寻找解决方案时,遇到了这个线程(但不是 FF 或 IE ) 使用 png 而不是 gif 将问题追溯到我的一个折叠图标(当我将 png 换成 gif 时),webkit 浏览器在生成流畅的动画时没有问题(但是一旦我将 png 换回,我的动画又一次断断续续……)

【讨论】:

你的 png 和 gif 有透明度吗? 它不是一个 8 x 8 的盒子(将折叠和展开图标描绘成一个矩形和正方形) 旧的还是新的,像这样的问题总是可以使用更多的解决方案。感谢您的加入。我当时正在使用 jpg,个人。

以上是关于为啥我的 jQuery 动画在基于 webkit 的浏览器中不稳定?的主要内容,如果未能解决你的问题,请参考以下文章

Jquery - 为啥我的图像不会在鼠标悬停时动画?

为啥我的 -webkit-background-clip: text ;不管用

Firefox 和 CSS3 动画 - 为啥我的文本会抖动?

使用 jQuery 运行/暂停 CSS 动画

用CSS3制作50个超棒动画效果教程

为啥会发生此 JQuery 错误?动画不是函数