下面的代码启动幻灯片的循环。当幻灯片的第一个周期完成后,我想在第一个幻灯片上暂停 6000 毫秒。在这种情况下,我希望能够将时间添加为 6000 毫秒而不是 1000 毫秒。
this.isPlaying = setInterval(function(){
self._change(null, "-=", null, self.lineScrollDo, null);
}, 1000);
下面的代码启动幻灯片的循环。当幻灯片的第一个周期完成后,我想在第一个幻灯片上暂停 6000 毫秒。在这种情况下,我希望能够将时间添加为 6000 毫秒而不是 1000 毫秒。
this.isPlaying = setInterval(function(){
self._change(null, "-=", null, self.lineScrollDo, null);
}, 1000);
使用 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);
})();
与该方法保持一致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();
假设你想要一个时间偏移的循环模式,那就是。