当页面没有焦点时,javascript动画排队

所以这个滑动动画在页面上查看时效果很好,但是如果我去另一个浏览器标签几分钟并回到这个标签,那就像所有的动画排队一样,当我离开时,一次性运行超高速。 它看起来很可怕……有什么想法吗?

$(document).ready(function(){

var timeOuts = new Array(); var currentSlide = 0; var slides = $('.banner_images').length; homeanimation(currentSlide); function homeanimation(i) { if (i == slides) { i = 0; } $('.banner_images:eq(' + i + ')').css('left', '-901px'); $('.banner_images:eq(' + i + ')').animate({ "left": "0px" }, 800); $('.overlay-content:eq(' + i + ')').fadeIn(1500); timeOuts[0] = setTimeout(function() { $('.banner_images:eq(' + i + ')').animate ({ "left": "901px" }, 800) }, 6000); timeOuts[1] = setTimeout(function() { $('.overlay-content:eq(' + i + ')').fadeOut(700) }, 6000); timeOuts[3] = setTimeout(function() { currentSlide = i + 1; }, 6000); timeOuts[2] = setTimeout(function() { homeanimation(currentSlide); }, 6000); } 

});

http://api.jquery.com/animate/

由于requestAnimationFrame()的性质,您不应该使用setInterval或setTimeout循环对动画进行排队。 为了保留CPU资源,支持requestAnimationFrame的浏览器在不显示窗口/选项卡时不会更新动画。 如果在动画暂停时继续通过setInterval或setTimeout对动画进行排队,则当窗口/选项卡重新获得焦点时,所有排队的动画将开始播放。 要避免这个潜在的问题,请在循环中使用上一个动画的回调,或者将函数附加到元素.queue()以设置超时以开始下一个动画。

抛弃setTimeouts。 它们在窗口焦点方面表现得很奇怪。 查看jQuery的自然.queue()function。

升级到1.6.3+

http://blog.jquery.com/2011/09/01/jquery-1-6-3-released/

他们在1.6.3中取出了requestAnimationFrame,这是你问题的原因(最有可能)