gpt4 book ai didi

javascript - setInterval 在 Chrome 上无法正常工作

转载 作者:可可西里 更新时间:2023-11-01 02:54:18 25 4
gpt4 key购买 nike

我有一个定制的幻灯片对象来执行名称在网站上指示的常见内容。一切正常,除非我在 Chrome 中切换标签并返回网站标签。发生这种情况时,幻灯片放映会变得疯狂并开始淡化图像,而不考虑给定的 setInterval 间隔。找不到与此相关的任何内容,所以我想至少知道这是代码问题还是软件问题。

这是代码(与 jQuery 一起使用):

$(function() {

// slideshow
var slideshow = {
id : false,
current : 0,
count : 0,
interval : false,
init : function(data) {
if (!data)
return false;

$.each(data, $.proxy(
function(index, value) {
this[index] = data[index];
}, this)
);

this.count = this.images.length;

for (x=1;x<=this.count;x++)
$('#slider ul.nav').append('<li></li>');

$('#slider ul.nav li').live('click', function()
{
slideshow.click(this);
});

$('#slider ul.nav li:eq(0)').addClass('on');
$('#slider ul.nav').css('width', (15*this.count)+'px');

return true;
},
start : function () {
slideshow.id = setInterval(function() { slideshow.action(); }, slideshow.options.interval);
},
stop : function() {
clearInterval(slideshow.id);
},
action : function() {
slideshow.current < (slideshow.count-1) ? slideshow.current++ : slideshow.current = 0;

$('#slider img').fadeOut('normal', function() {
$('#slider img').attr('src', slideshow.images[slideshow.current].url);
$('#slider ul.nav li').removeClass('on');
$('#slider ul.nav li:eq('+slideshow.current+')').addClass('on');
$('#slider div.title').html(slideshow.images[slideshow.current].title);
$('#slider div.description').html(slideshow.images[slideshow.current].description);
$('#slider a.more').attr('href', slideshow.images[slideshow.current].target);
}).fadeIn('normal');

return true;
},
click : function(o) {
slideshow.stop();

var index = $('#slider ul.nav li').index(o);
slideshow.current = index;

$('#slider img').fadeOut('normal', function() {
$('#slider img').attr('src', slideshow.images[index].url);
$('#slider ul.nav li').removeClass('on');
$(o).addClass('on');
$('#slider div.title').html(slideshow.images[index].title);
$('#slider div.description').html(slideshow.images[index].description);
$('#slider a.more').attr('href', slideshow.images[index].target);
}).fadeIn('normal');

slideshow.start();
return true;
},
};

slideshow.init(slider);
slideshow.start();

});

最佳答案

Chrome(显然还有最新版本的 Firefox)在选项卡处于后台时降低 setInterval 的速度以提高前台性能。当后台页面中有快速运行的计时器驱动动画时,这可能最重要。当页面返回到前台时,它会“尝试”跟上并运行一堆 setInterval 调用,这比它们正常运行的速度快得多。

解决方法是:

  1. 延长 setInterval 的时间,这样 Chrome 就不会干扰它(您必须查看那个时间)。
  2. 当页面进入后台时停止间隔计时器(当它不可见时无需运行幻灯片)- 然后当页面进入前台时再次启动它。
  3. 使用重复的 setTimeout 而不是 setInterval 和某种类型的重复 setTimeout,如下所示:

代码:

function nextSlide() {
// show next slide now
// set timer for the slide after this one
setTimeout(function() {
nextSlide(); // repeat
}, xxx)
}

类似帖子 here .

关于javascript - setInterval 在 Chrome 上无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6951727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com