下面的代碼啓動幻燈片放映循環。當幻燈片的第一個循環完成時,我想在第一個幻燈片上暫停6000ms。在這種情況下,我希望能夠將時間添加爲6000ms而不是1000ms。setInterval具有不同的持續時間
this.isPlaying = setInterval(function(){
self._change(null, "-=", null, self.lineScrollDo, null);
}, 1000);
下面的代碼啓動幻燈片放映循環。當幻燈片的第一個循環完成時,我想在第一個幻燈片上暫停6000ms。在這種情況下,我希望能夠將時間添加爲6000ms而不是1000ms。setInterval具有不同的持續時間
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();
假設你想要一個循環的時間偏移模式,也就是說。
你必須停止間隔,將新的設置爲6秒,停止它,然後回到1秒。你最好重構它不使用setInterval。或者可能包含已經具有此功能的幻燈片(cycle2) –