0

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

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

2 回答 2

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);
})();
于 2013-10-23T21:28:55.267 回答
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();

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

于 2013-10-29T18:25:29.830 回答