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