Central control for timers
Concept courtesy of John Resig and can be found in his new book "Secrets of the JavaScript Ninja". Do it again
Concept courtesy of John Resig and can be found in his new book "Secrets of the JavaScript Ninja". Do it again
var timers = { //#1 Declare timer control object
timerID: 0, //#2 Record state
timers: [], //#2
add: function(fn) { //#3 Create function to add handlers
this.timers.push(fn);
},
start: function runNext() { //#4 Function to start a timer
if (this.timerID) return;
(function() {
if (timers.timers.length > 0) {
for (var i = 0; i < timers.timers.length; i++) {
if (timers.timers[i]() === false) {
timers.timers.splice(i,1);
i--;
}
}
timers.timerID = setTimeout(runNext, 0);
}
})();
},
stop: function() { //#5 Clear timeout - stop function
clearTimeout(this.timerID);
this.timerID = 0;
}
};
var box = document.getElementById("box"), x = 0, y = 20;
var square = document.getElementById("square"), x = 0, y = 0;
timers.add(function() {
box.style.left = x + "px";
if (++x > 90) return false;
});
timers.add(function() {
box.style.top = y + "px";
y += 2;
if (y > 200) return false;
});
timers.add(function() {
square.style.left = x + "px";
if (++x > 100){
square.style.background = "yellow";
return false;
}
});
timers.start();