Saya menggunakan
varName = setInterval(function() { ... }, 1000);
untuk mengatur beberapa interval dalam plugin jquery yang saya tulis, tetapi ketika plugin dimuat ulang, saya perlu menghapus interval tersebut. Saya mencoba menyimpannya dalam variabel, seperti ini:
(function($){
$.mosaicSlider = function(el) {
var base = this;
var transitionInterval, mainInterval;
...
base.init = function() {
mainInterval = setInverval(function() { ... }, 1000);
}
base.grid = function() {
this.transition() = function() {
transitionInterval = setInterval(function(...) {
}
}
base.init();
Dan saya mencoba menghapus interval-interval tersebut di fungsi base.init(), seperti ini:
clearInterval(transitionInterval);
clearInterval(mainInterval);
Dan seperti ini:
window.oldSetInterval = window.setInterval;
window.setInterval = new function(func, interval) { }
Simpanlah mereka dalam sebuah objek. Karena Anda satu-satunya yang membuat interval-interval ini, dan Anda tahu apa itu, Anda dapat menyimpannya dan kemudian mengacaukannya sesuai keinginan Anda. Saya akan membuat objek yang didedikasikan hanya untuk itu, sesuatu seperti:
var interval = {
// to keep a reference to all the intervals
intervals : new Set(),
// create another interval
make(...args) {
var newInterval = setInterval(...args);
this.intervals.add(newInterval);
return newInterval;
},
// clear a single interval
clear(id) {
this.interals.delete(id);
return clearInterval(id);
},
// clear all intervals
clearAll() {
for (var id of this.intervals) {
this.clear(id);
}
}
};
Pertanyaan pertama Anda mungkin
Mengapa membuat objek terpisah hanya untuk itu?
Well Watson, ini untuk menjaga interval buatan tangan Anda yang terkait dengan plugin/proyek Anda jauh dari mata-mata, sehingga Anda tidak akan mengacaukan interval lain yang diatur di halaman yang tidak terkait dengan plugin Anda.
Ya, tapi mengapa saya tidak bisa menyimpannya di dalam objek dasar?
Anda tentu saja bisa, tetapi saya pikir cara ini jauh lebih bersih. Ini memisahkan logika yang Anda lakukan di basis Anda dengan logika timeout yang aneh.
Mengapa Anda menyimpan interval di dalam Set dan bukan array?
Akses lebih cepat dan sedikit kode yang lebih bersih. Anda bisa memilih salah satu cara, sungguh.
Anda bisa melakukan seperti,
var interval_id = window.setInterval("", 9999); // Get a reference to the last
// interval +1
for (var i = 1; i < interval_id; i++)
window.clearInterval(i);
//for clearing all intervals
Intialisasi Timer dan atur sebagai objek jendela. Window.myInterval akan menyimpan ID dari Timer.
seperti window.myInterval = setInterval(function() { console.log('hi'); }, 1000);
Untuk menghapus Interval Anda dapat menulis seperti
if(window.myInterval != undefined && window.myInterval != 'undefined'){
window.clearInterval(window.myInterval);
alert('Timer cleared with id'+window.myInterval);
}