2013-10-23 63 views
0

下面的代碼啓動幻燈片放映循環。當幻燈片的第一個循環完成時,我想在第一個幻燈片上暫停6000ms。在這種情況下,我希望能夠將時間添加爲6000ms而不是1000ms。setInterval具有不同的持續時間

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

你必須停止間隔,將新的設置爲6秒,停止它,然後回到1秒。你最好重構它不使用setInterval。或者可能包含已經具有此功能的幻燈片(cycle2) –

回答

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); 
})(); 
+0

這適用於此代碼應該工作的方式。我還希望能夠在某些情況下清除此超時,例如在懸停時,我應該能夠清除由此settimeout生成的超時。語法是什麼? – neelmeg

+0

@web_dev是的,你可以清除它。我稍微修改了一下。請注意,如果'self'已經是'this'的引用,那麼你不需要第一行,只需要你自己而不是'_this'。通過修改,你應該可以使用'clearTimeout(yourobject.isPlaying)'; – Paulpro

+0

太棒了,作品太完美了。 – neelmeg

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(); 

假設你想要一個循環的時間偏移模式,也就是說。

相關問題