/** * De Timer class is een geavanceerde versie van de setTimeout en setInterval functies. * * @version 1.0.1 - 2008.04.18 * @package jsx.Timer */ jsx.Timer = JSX.Class.create('jsx.Timer'); jsx.Timer.prototype = { /** * De id van de interval, gegenereerd door de setInterval() function. * * @access private * @var int */ __timer: null, /** * Het aantal keren dat de interval is verstreken. * * @access private * @var int */ __called: 0, /** * Het aantal miliseconden tussen de intervals. * * @access private * @var int */ __delay: 1000, /** * Het aantal miliseconden tussen de intervals. * * @access private * @var int */ __interval: 0, /** * Het maximaal aantal keren dat de interval mag worden uitgevoerd. * * @access private * @var int */ __repeat: 0, /** * Geeft aan of de Timer loopt of niet. * * @access private * @var bool */ __running: false, /** * Het onStart event wordt uitgevoerd zodra het Timer object wordt gestart door * middel van de start() function. * * @event */ onStart: null, /** * Het onStop event wordt uitgevoerd zodra het Timer object wordt gestart door * middel van de stop() function. * * @event */ onStop: null, /** * Het onTime event wordt iedere keer uitgevoerd wanneer het $delay aantal seconden * zijn verstreken. * * @event * @param int Het aantal keren dat de onTime event is aangeroepen. */ onTime: null, /************************************************************************************* * Constructor * * @access public * @param number $delay Het aantal miliseconden tussen de oproepen. * @param number $repeat Het aantal oproepen dat maximaal mag worden uitgevoerd. */ __construct: function(delay, repeat) { JSX.Event.makeBroadcaster(this); this.setDelay(delay); this.setRepeat(repeat); }, /************************************************************************************* * Geeft de vertraging tussen de oproepen op. * * @access public * @param number $delay Het aantal miliseconden tussen de oproepen. * @return void */ setDelay: function(delay) { if(JSX.isNumeric(delay)) this.__delay = delay; }, /************************************************************************************* * Geeft het maximaal aantaal oproepingen op. Als het aantal is overschreden, wordt * automatisch de stop() function uitgevoerd. * * @access public * @param number $repeat Het aantal oproepen dat maximaal mag worden uitgevoerd. * @return void */ setRepeat: function(repeat) { if(JSX.isNumeric(repeat)) this.__repeat = repeat; }, /************************************************************************************* * Geeft het aantal oproepingen terug. * * @access public * @return number */ getCallCount: function() { return this.__called; }, /************************************************************************************* * Geeft de vertraging tussen de oproepingen terug. * * @access public * @return number */ getDelay: function() { return this.__delay }, /************************************************************************************* * Geeft het maximaal aantal oproepingen terug. * * @access public * @return number */ getRepeatCount: function() { return this.__repeat; }, /************************************************************************************* * Geeft aan of de Timer momentaal aan staat of niet. * * @access public * @return bool */ isRunning: function() { return this.__running }, /************************************************************************************* * Start de timer en zorgt ervoor dat om de zoveel miliseconden een call functie * wordt uitgevoerd. * * @access public * @return void */ start: function() { if(!this.__running) { var $timer = this; var call = function() { $timer.__called++; $timer.dispatchEvent('onTime', [$timer.__called]); if($timer.__called >= $timer.__repeat && $timer.__repeat > 0) $timer.stop(); else if($timer.__delay != $timer.__interval) { $timer.stop(); $timer.start(); } } this.__running = true; this.__interval = this.__delay; this.__timer = setInterval(call, this.__interval); this.dispatchEvent('onStart'); } }, /************************************************************************************* * Stopt de timer. * * @access public * @return void */ stop: function() { if(this.__running) { clearInterval(this.__timer); this.__running = false; this.dispatchEvent('onStop'); } }, /************************************************************************************* * Hersteld de interne optel variabelen. * * @access public * @return void */ reset: function() { this.__called = 0; } };