当窗口没有聚焦时,setTimeout()是否有问题?

时间:2011-10-06 14:32:49

标签: javascript jquery settimeout

我正在使用setTimeout()在我网站上使用横幅进行“幻灯片放映”的网站上工作。一切正常,我将延迟设置为10秒。只有当我切换窗口/标签并执行其他操作时,才会出现此问题。当我回来时,这个功能运行了很多次我(假设)赶上什么的。问题是,我的屏幕开始一遍又一遍地闪烁,以显示所有横幅淡入和淡出。

关于解决方案的任何想法?我在谷歌浏览器中注意到这一点,我也知道它发生在Firefox中。对IE不确定。

修改

这是我正在处理的片段。遗憾的是,它是一个非常大的脚本的一部分,并连接到一个非常复杂的HTML文件。

我希望你至少可以知道这里发生了什么:

var lval=0;
var nval=1;
setHead = function(data) {
        lval=nval;
        var index=1;
        $.each(data, function(name,value) {
            if (Math.floor(Math.random()*index+2)==index+1) {
                nval=index;
            }
            if (index==lval) {
                $('.headmaster').find('img').fadeOut('fast');
                //$('.headmaster').css('background-color',value.backgroundcolor);
                $('.headmaster').find('a').attr('href',value.url);
                $('.headmaster').animate({backgroundColor:value.backgroundcolor},'slow',function() {
                    $('.headmaster').find('img').attr('src',value.img);     
                    $('.headmaster').find('img').fadeIn('slow');                                                                        
                });
            }
            index++;
        });
        setTimeout(function() { setHead(data); },10000);
}

arrayGet = function(arr,idx) {
    $.each(arr, function(i,v) {
        if (i==idx) {
            return v    
        }
    });
    return null
}

$(document).ready(function() {  
    $.getJSON('json/intros.json', setHead);
});

我正在使用jQuery作为动画,使用颜色插件来淡化颜色。

1 个答案:

答案 0 :(得分:3)

这可能是因为您使用的是旧版本的jQuery。即开发团队已开始使用requestAnimationFrame API的那个。幸运的是,他们将其修复为1.6.3。以下是blog

的摘录
  

不再有动画“虫洞”:当我们在版本中添加支持时,我们对浏览器的requestAnimationFrame API寄予厚望   1.6。但是,自那时以来我们收到的投诉数量最多的投诉之一与requestAnimationFrame在标签时的行为方式有关   不可见。选项卡不可见时启动的所有动画   “堆栈”并且在选项卡重新聚焦之前不会执行。   然后他们都以翘曲的速度制作动画!我们已经删除了对此的支持   API(对你调用jQuery动画的方式没有影响   功能)并计划将其合并到未来版本的jQuery中。

只需更新为1.6.4