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

发布于 2024-12-09 11:34:55 字数 922 浏览 0 评论 0原文

因此,在页面上查看时,这个滑动动画效果很好,但如果我转到另一个浏览器选项卡几分钟,然后返回到此选项卡,就像我离开时所有动画都在排队并同时运行得超快。它看起来很可怕...有什么想法吗?

$(文档).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);

}

});

So this sliding animation works great when viewing on the page, but if i go to another browser tab for a couple minutes and come back to this tab it's like all the animations queued up while i was gone and run superfast all at once. It looks horrible... Any ideas?

$(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);

}

});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一抹苦笑 2024-12-16 11:34:56

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

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

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

Because of the nature of requestAnimationFrame(), you should never queue animations using a setInterval or setTimeout loop. In order to preserve CPU resources, browsers that support requestAnimationFrame will not update animations when the window/tab is not displayed. If you continue to queue animations via setInterval or setTimeout while animation is paused, all of the queued animations will begin playing when the window/tab regains focus. To avoid this potential problem, use the callback of your last animation in the loop, or append a function to the elements .queue() to set the timeout to start the next animation.

灯角 2024-12-16 11:34:56

放弃 setTimeouts。在涉及窗口焦点时,它们的行为很奇怪。查看 jQuery 的自然 .queue() 功能。

ditch the setTimeouts. they behave strangely where window focus is concerned. check out jQuery's natural .queue() functionality.

爱你是孤单的心事 2024-12-16 11:34:56

升级到 1.6.3+

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

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

Upgrade to 1.6.3+

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

They pulled out the requestAnimationFrame in 1.6.3 which is the cause of your problem (most likely)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文