setInterval具有不同的持续时间

时间:2013-10-23 21:24:44

标签: javascript jquery settimeout setinterval

下面的代码启动幻灯片演示的循环。当幻灯片放映的第一个循环完成后,我想暂停第一个幻灯片放映6000毫秒。在这种情况下,我希望能够将时间添加为6000毫秒而不是1000毫秒。

this.isPlaying = setInterval(function(){
                self._change(null, "-=", null, self.lineScrollDo, null);
            }, 1000);

2 个答案:

答案 0 :(得分:0)

使用setTimeout而不是setInterval:

var _this = this;
(function(){
  function next(){
    self._change(null, "-=", null, self.lineScrollDo, null);
    var duration = 1000;
    if(/* cond */)
      duration = 6000;
    _this.isPlaying = setTimeout(next, duration);
  }
  _this.isPlaying = setTimeout(next, 1000);
})();

答案 1 :(得分:0)

使用setInterval方法,不同的方法可能就是使用计数器。

(function(){
  var counts = 0, target = 6, self = /* Refer to your object here */;
  self.isPlaying = setInterval(function(){
    if ( ++counts === target ) {          
      self._change(null, "-=", null, self.lineScrollDo, null);
      target = target === 6 ? 1 : 6;
      counts = 0;
    }
  }, 1000); /// <-- needs to be set at offset that will hit both 1 and 6 secs.
})();

显然,这样做的缺点是你会有更多的执行无所事事,如果你找不到共同的分母,实现不同的时间偏移可能会很棘手。但是资源的创建和破坏较少,并且更容易将多个时间开关链接在一起。

例如,您可以拥有一个跟踪偏移量的堆栈:

var counts = 0, targets = [6,1,2,4], target = targets.shift(), ...

然后而不是使用:

target = target === 6 ? 1 : 6;

您使用:

targets.push( target );
target = targets.shift();

假设你想要一个圆形的时间偏移模式,那就是。