• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Eigene Timer Klasse (funkt. nur im FF)

tremore

New member
Eigene Timer Klasse - Meinungen?

Hi,

ich wollte euch meine selbst geschriebene Timer Klasse vorstellen. Die besonderheit daran ist, ich zähle nicht einfach immer 1s hoch, sondern schaue die tatsächliche Uhrzeit und subtrahiere die Startzeit. Damit erreicht man einen zuverlässigeren Timer über eine lange Zeit (eigentlich immer 100% genau). Mir ist zB beim Mozilla aufgefallen das die Interval Funktion nicht 100% genau ist (nicht genau 1s Abstand), ich schätze bei anderen Browsern wird es ähnlich sein. Ich gebe zu, es ist etwas groß geworden, aber schaut selbst:

PHP:
<script type="text/javascript">
	function mod(divisee,base) {
		// Created 1997 by Brian Risk.  http://members.aol.com/brianrisk
		return Math.round(divisee - (Math.floor(divisee/base)*base));
	}

	function Counter()
	{
		var active = null;
		var start = 0;
		var self = this;
		
		var secs = 0;
		var mins = 0;
		var hours = 0;
		var oldsec = 0;
		
		var __interval = 200; // lower interval = more precision onTimer
		
		// start the counter
		this.start = function()
		{
			if(!active)
			{
				start = this.__now();
				secs = 0; // init
				mins = 0;
				hours = 0;
				oldsec = 0;
				active = window.setInterval(function() { self.__onInterval(); }, __interval);
			}
		};
		
		this.stop = function()
		{
			this.pause();
			
			secs = 0;
			mins = 0;
			hours = 0;
			
			this.onTimer(hours,mins,secs);
		};
		
		this.pause = function()
		{
			if(active)
			{
				window.clearInterval(active);
				active = null;
			}
			
			oldsec = 0;
		}
		
		this.resume = function()
		{
			if(!active)
			{
				start = this.__now() - ((((hours * 60) + mins) * 60) + secs) * 1000;
				active = window.setInterval(function() { self.__onInterval(); }, __interval);
			}
		}

		this.get_seconds = function (){ return secs; };
		this.get_minutes = function (){ return mins; };
		this.get_hours = function (){ return hours; };

		// this function is called every second
		this.onTimer = function() {};
		
		// internal function
		this.__onInterval = function()
		{
			var diff = this.__now() - start;
			
			secs = Math.round(diff / 1000);
			mins = Math.floor(secs / 60);
			secs = mod(secs,60);
			hours = Math.floor(mins / 60);
			mins = mod(mins,60);
			
			if((oldsec < secs) || (oldsec == 59))
			{
				this.onTimer(hours,mins,secs);
				oldsec = secs;
			}
		};
		
		// internal function
		this.__now = function()
		{
			var now = new Date();
			return now.getTime();
		};
	}
</script>

Eine Testimplementierung:

PHP:
<script type="text/javascript">
	mycounter = new Counter();
	mycounter.onTimer = function(hours,mins,secs){ document.getElementById('timetoshow').innerHTML = hours+':'+mins+':'+secs; };
</script>

<span id="timetoshow">0</span>
<input type="button" value="start" onClick="mycounter.start();">
<input type="button" value="pause" onClick="mycounter.pause();">
<input type="button" value="weiter" onClick="mycounter.resume();">
<input type="button" value="stop" onClick="mycounter.stop();">

Würde mich freuen wenn ihr sie mal testet. Verbersserungsvorschläge sind willkommen, die Vereinfachung oder JS-Konformität erhöht (falls vorhanden). Dabei fällt mir ein, ich berechne die Zeit selbst in der Funktion __oninterval, das hat den Grund das ich mit getHours nicht klar kam. Er hatte immer eine Stunde angezeigt, was angesichts der Millisekunden von getTime nicht sein konnte.

MfG
 
Zuletzt bearbeitet:
Wurde das Thema grad verschoben? Zumindest stimmt der Thread-Titel nicht mehr, denn es funktioniert jetzt im FF und IE6.

MfG
 
AW: Eigene Timer Klasse - Meinungen?

Würde mich freuen wenn ihr sie mal testet. Verbersserungsvorschläge sind willkommen, die Vereinfachung oder JS-Konformität erhöht (falls vorhanden).

Auf Grund dieser 'Aussage' hatte ich es mir erlaubt, diesen Beitrag in das, meiner Meinung nach, entsprechende Forum umzusortieren.
 
Zurück
Oben