jQuery 动画在 Firefox 中断断续续

Posted

技术标签:

【中文标题】jQuery 动画在 Firefox 中断断续续【英文标题】:jQuery animations are choppy and stutter in Firefox 【发布时间】:2011-02-15 05:24:01 【问题描述】:

我喜欢认为我不是一个傻瓜,但我无法让我的 jQuery 水平幻灯片动画流畅地制作动画,尤其是在 FireFox 中(在 Mac 上)。有人给点建议吗?

动画是这样完成的:

$('#lookbook').stop().animate(left: -((lookbook-1)*825)+'px',  duration: 800, complete: cap_fade(1));

示例链接:

http://mayfourteenth.com/w/lookbook?preview=1

【问题讨论】:

【参考方案1】:

我已经在 Windows 上的 Firefox、Chrome(dev) 和 Safari 中进行了测试,并且动画在所有浏览器中都卡顿(但在 FF 中更多)。

要提高 javascript 性能,您可以摆脱所有 getElementById 或 $("div#mydividentyfier") 调用。 如果您将它们存储在变量中,它们将被缓存。 例子: 这样做可以大大提高性能:

var lookbook = $('#lookbook');
var look_caption = $('#look_caption');
if (lookbook.length)     
    lookbook.width(lookbook).width()*$('#lookbook img').length)
    if (look_caption) 
        look_caption.html(lookcaps[0]);
        look_caption.fadeIn();
    

代替:

if ($('#lookbook').length)     
    $('#lookbook').width($('#lookbook').width()*$('#lookbook img').length)
    if ($('#look_caption')) 
        $('#look_caption').html(lookcaps[0]);
        $('#look_caption').fadeIn();
    

我还建议对图像使用数据 URI,因为它可以减少加载页面所需的 httpRequest 数量。

【讨论】:

【参考方案2】:

我在 Chrome 中的动画看起来很流畅。不过,我相信您可以做几件事来提高平滑度:

首先,可以像 here(在顶部)一样提前预加载所有图像。但是,像在"Example link" 中那样一次性显示它们会损害性能,因为它们都是同时进行动画处理的:

<div id="lookbook"> 
    <div><img src="/q_images/lib/lookbook/1.jpg"></div> 
    <div><img src="/q_images/lib/lookbook/2.jpg"></div> 
    ...
    <div><img src="/q_images/lib/lookbook/15.jpg"></div> 
</div> 

您可以简单地在当前图像的任一侧定位下一张和上一张图像,而不是这样做,但在需要之前不要将其余图像放在页面中。 (不过,预加载它们仍然没问题。)

其他可以稍微提高性能的事情如下:

    使用更小的(按像素和/或文件大小)图像。 通过提前计算来进行小的代码优化。 使用独立的动画库而不是 jQuery。

【讨论】:

【参考方案3】:

你可能也想用这个

.animate(left:'-=825'); //next
//and
.animate(left:'+=825'); //previous

代替

.animate(left: -((lookbook-1)*825)+'px');

【讨论】:

我很欣赏你的理解,但这打破了“捕捉”。

以上是关于jQuery 动画在 Firefox 中断断续续的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 SVG 蒙版动画在 Firefox 中断断续续,但在 Chrome 中却很流畅?

jQuery 动画位置在 Firefox 中固定不准确

在Firefox中切换浏览器选项卡时jquery动画中断

一起记录 Firefox/jQuery/CSS 动画的错误?

jQuery UI 切换类动画在 Safari / Chrome 中没有动画 - 但在 Firefox 中动画?

jQuery 图像/悬停预览导致 IE7 中出现断断续续的行为