setInterval' stacking'向上

时间:2015-02-02 08:48:13

标签: javascript jquery setinterval

使用setInterval运行一个提供' flash'效果到列表。

如果我保持页面打开,但是访问另一个标签/在10分钟左右回来,setInterval感觉就像它每1秒工作一次,因为该功能一直被调用。

感觉像是随着时间的推移堆积起来,无论如何要解决这个问题?

function flashListItems(){
  $('.imageview_navigation li').each(function(i) {
    $(this).delay((i++) * 100).fadeTo(200, 0.8).fadeTo(200, 1);
  });
}

setInterval(function(){
  flashListItems();
}, 10000);

小提琴:http://jsfiddle.net/6w6wrsm0/

1 个答案:

答案 0 :(得分:1)

您的代码没有任何问题,一些网络浏览器会减慢这些类型的间隔,从而不会导致过多的使用。因此,当不使用网页时,间隔最快的时间通常约为1秒。

可能有办法解决这个问题,这里提到:

How can I make setInterval also work when a tab is inactive in Chrome?

  

让你的动画功能按实际经过的时间打勾。

var div = $('#my-div');
var leftValue = 0;
var interval = (1000/20); //20fps
var before = new Date();

setInterval(function()
{
    now = new Date();
    var elapsedTime = (now.getTime() - before.getTime());

    if(elapsedTime > interval)
    {
        //Recover the motion lost while inactive.
        leftValue += Math.floor(elapsedTime/interval);
    }
    else
    {
        leftValue++;
    }

    div.css("left", leftValue);
    before = new Date();    

}, interval);