Une version légèrement modifiée de Tim Downs réponse . Cependant, puisque Tim retourné mon édition, je dois répondre à cette question moi-même. Ma solution permet d'utiliser des arguments
comme troisième (3, 4, 5...) paramètre et pour effacer la minuterie :
function Timer(callback, delay) {
var args = arguments,
self = this,
timer, start;
this.clear = function () {
clearTimeout(timer);
};
this.pause = function () {
this.clear();
delay -= new Date() - start;
};
this.resume = function () {
start = new Date();
timer = setTimeout(function () {
callback.apply(self, Array.prototype.slice.call(args, 2, args.length));
}, delay);
};
this.resume();
}
Comme Tim l'a mentionné, les paramètres supplémentaires ne sont pas disponibles dans l'application IE lt 9
Cependant, j'ai travaillé un peu pour qu'il puisse fonctionner en oldIE
aussi.
Utilisation : new Timer(Function, Number, arg1, arg2, arg3...)
function callback(foo, bar) {
console.log(foo); // "foo"
console.log(bar); // "bar"
}
var timer = new Timer(callback, 1000, "foo", "bar");
timer.pause();
document.onclick = timer.resume;
1 votes
Pour ceux qui se posent la question, la mise en pause s'applique par exemple à un div qui doit disparaître dans 5 secondes, à 3 secondes (donc 2 secondes restantes) l'utilisateur passe la souris sur le div, vous mettez en pause le délai d'attente, une fois que l'utilisateur passe la souris sur le div, vous le reprenez, 2 secondes plus tard il disparaît.