Almacénelos en un objeto. Como usted es el único que hace estos intervalos, y usted sabe cuáles son, puede almacenarlos y luego meterlos con ellos como lo desee. Me gustaría crear un objeto dedicado para eso, algo como:
var interval = {
//to keep a reference to all the intervals
intervals : {},
//create another interval
make : function (fun, delay) {
//see explanation after the code
var newInterval = setInterval.apply(
window,
[ fun, delay ].concat([].slice.call(arguments, 2))
);
this.intervals[ newInterval ] = true;
return newInterval;
},
//clear a single interval
clear : function (id) {
return clearInterval(this.intervals[id]);
},
//clear all intervals
clearAll : function() {
var all = Object.keys(this.intervals), len = all.length;
while (len --> 0) {
clearInterval(all.shift());
}
}
};
Su primera pregunta podría ser
¿Por qué hacer un objeto separado para eso?
Bueno Watson, es para mantener sus intervalos hechos a mano relacionados con su plugin/proyecto lejos de miradas indiscretas, por lo que no se metan con otros intervalos que se encuentra en la página no relacionada con su complemento.
Sí, pero ¿por qué no puedo almacenarlo dentro del objeto base?
Sin duda puede hacerlo, pero creo que de esta manera es mucho más limpio. Separa la lógica que haces en tu base con la extraña lógica de tiempo de espera.
"¿Por qué almacenaste los intervalos dentro de un objeto y no en una matriz?"
Acceso más rápido y un poco de código más limpio. Puedes ir de cualquier manera, en serio.
¿Qué es esto .apply y todas estas cositas matriz extraños en el interior de hacer?"
setInterval
también acepta una lista de argumentos que se pasan a la función. Function.prototype.apply
está más allá del alcance de esta pregunta, pero here's un semi-explicación para ello.
Estás haciendo trampa! se utilizaron cuenta con ES5! no quiero eso, quiero compatibilidad ES3
Me tienes. Object.keys
es de hecho ES5. Sin embargo, puede reemplazarlo fácilmente con un bucle for in
, o si se siente súper aventurero (para una clarificación y un protocolo futuros, eso era sarcasmo), cuélguelo.
intentar añadir 'transitionInterval var, mainInterval;.' De '' función mosaicSlider' después (function ($) { ' –
posible duplicado de [How to clearInterval with unknown ID?] (http://stackoverflow.com/questions/6843201/how-to-clearinterval-with-unknown-id) –
Posible duplicado de [Cómo detener todos los tiempos de espera e intervalos usando javascript ?]] (http://stackoverflow.com/questions/3141064/how-to-stop-all-timeouts-and-intervals-using-javascript) –