2011-11-14 11 views

cevap

103

ise "yeniden başlatma" tarafından, sizi

var ticker = function() { 
    console.log('idle'); 
}; 

sonra: Ve tekrarlamaktan kaçınmak için geri arama ayrı fonksiyonu olarak externalization Bu anda yeni bir 4 saniyelik aralık başlatmak demek, sonra durup zamanlayıcıyı yeniden başlatmanız gerekir.

function myFn() {console.log('idle');} 

var myTimer = setInterval(myFn, 4000); 

// Then, later at some future time, 
// to restart a new 4 second interval starting at this exact moment in time 
clearInterval(myTimer); 
myTimer = setInterval(myFn, 4000); 

Ayrıca getirme özelliğine sahiptir biraz zamanlayıcı nesnesi kullanabilirsiniz:

function Timer(fn, t) { 
    var timerObj = setInterval(fn, t); 

    this.stop = function() { 
     if (timerObj) { 
      clearInterval(timerObj); 
      timerObj = null; 
     } 
     return this; 
    } 

    // start timer using current settings (if it's not already running) 
    this.start = function() { 
     if (!timerObj) { 
      this.stop(); 
      timerObj = setInterval(fn, t); 
     } 
     return this; 
    } 

    // start with new interval, stop current interval 
    this.reset = function(newT) { 
     t = newT; 
     return this.stop().start(); 
    } 
} 

Kullanımı:

var timer = new Timer(function() { 
    // your function here 
}, 5000); 


// switch interval to 10 seconds 
timer.reset(10000); 

// stop the timer 
timer.stop(); 

// start the timer 
timer.start(); 

Çalışma demo: https://jsfiddle.net/jfriend00/t17vz506/

+0

Güzel nesne.Javascript'te OOP kullanan birini gördüğümde kendimi iyi hissediyorum! Teşekkür ederim! – Fortin

8

den yeniden başlatmak istiyorum. Eğer yeniden karar verirken daha sonra

var myTimer = window.setInterval(ticker, 4000); 

:

window.clearInterval(myTimer); 
myTimer = window.setInterval(ticker, 4000); 
+0

ama nasıl? clearInterval (myTimer) ve daha sonra setInterval (myTimer, 4000) çalışmıyor :( –

+0

@RikdeVos, çalışmıyor neden? Ayrıca 'setInterval (myTimer, 4000)' değil, 'setInterval (ticker olmalı, 4000); '. –