kostenloser Webspace werbefrei: lima-city


JS Timer für IE 8

lima-cityForumDie eigene HomepageHTML, CSS & Javascript

  1. Autor dieses Themas

    snhth

    snhth hat kostenlosen Webspace.

    Hey

    Ich suche irgendwie ne Möglichkeit, für den Internet Explorer 8 (es hat Gründe, warum ausgerechnet für den, fragt nicht), eine clock in Javascript zu implementieren.

    Die gängigen Methoden wie setInterval usw. funktionieren meines Wissens nach nicht im IE8. deswegen hab ich versucht, meine eigene zu schreiben:

    var TimeStart=Date.now();
    var TimeEnd=TimeStart+600;
    
    function write(){
      document.write(TimeEnd-Date.now()+'\n');
      return true;
    }
    
    function timeMilliSeconds(){
    var TimeLast = Date.now();
    while((TimeEnd-Date.now()>0)){
      if(Date.now()!=TimeLast){
        if(write()){
          TimeLast=Date.now();}
      }
    }
    }
    
    timeMilliSeconds();


    Diese Uhr läuft 0,6 Sekunden. Letzten Endes will ich die Uhr 30 Sekunden ausführen, und in einem regelmäßigen Abstand (zb alle 0,2 Sekunden) eine Funktion ausführen (hier wird write(); als Platzhalter verwendet).

    Leider klappt es bei mir mit dem o.g. source nicht ganz, die es wird erst in das Dokument geschrieben, wenn die Schleife schon durch ist, und dann aber auch tatsächlich jede millisekunde.

    weiß jmnd, woran das liegt? bzw hat einen hinweis auf eine andere funktion, die ich verwenden kann?

    (ist dringend, hab noch 16h Zeit dafür)

    vielen Dank, snhth
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Wenn es schnell gehen muss: Dann verwende jQuery. Das kommt mit nahezu allen Browsern klar. Auch dem Internet Explorer.
  4. Autor dieses Themas

    snhth

    snhth hat kostenlosen Webspace.

    ich darf keine extra librarys einbinden :(
  5. g****e

    Für sowas gibt es normalerweise das "setTimeout": https://developer.mozilla.org/en-US/docs/Web/API/Window.setTimeout
    Ich hab dir eine schnelle Klasse gebastelt, welche auch im IE8 funktionieren sollte (ich hab keinen IE8, und nichtmal den IE^^, sry):
    window.Timer = function(argId, argTime) {
    	var el = document.getElementById(argId);
    	if (!el) {return null;}
    	var running = false;
    	var targetTime = null;
    	var time = parseInt(argTime);
    	function calcTimer() {
    		var lasting = targetTime - (Date.now()/1000);
    		var min = parseInt(lasting/60);
    		var sec = parseInt(lasting%60);
    		min = ((min+"").length==1) ? "0"+min : min;
    		sec = ((sec+"").length==1) ? "0"+sec : sec;
    		el.innerHTML = min + ":" + sec
    		if (running && lasting > 0) {window.setTimeout(calcTimer, 500);}
    	}
    	
    	this.start = function() {
    		running = true;
    		targetTime = (Date.now()/1000)+time;
    		calcTimer();
    	}
    	
    	this.stop = function() {
    		running = false;
    	}
    	
    	this.setTime = function(argTime) {
    		time = parseInt(argTime);
    	}
    }

    Diese Klasse kannst du nun benutzen indem du sagst:
    <div id="timerElement"></div>

    var timer1 = new window.Timer("timerElement", 10); // timerElement ist das Ziel, es soll 10 Sekunden runterzählen
    if (timer1 !==null) {
    	timer1.start();
    }

    Den Timer könntest du jetzt noch mittels "stop" wieder stoppen, und mittels "setTimer" eine neue Zielzeit vorgeben, welche AB DER STARTZEIT gezählt wird.

    Im normalfall sollte das im IE8 funktionieren, ich hab extra innerHTML genommen, weil textContent noch nicht unterstützt ist, und innerText nicht von jedem Browser unterstützt wird. Im normalfall sollte es funktionieren wie gewünscht.

    Liebe Grüße
  6. Autor dieses Themas

    snhth

    snhth hat kostenlosen Webspace.

    ggamee schrieb:
    ...

    Im normalfall sollte das im IE8 funktionieren, ich hab extra innerHTML genommen, weil textContent noch nicht unterstützt ist, und innerText nicht von jedem Browser unterstützt wird. Im normalfall sollte es funktionieren wie gewünscht.

    ...


    Erstmal vielen Dank für den umfangreichen Code!

    Funktioniert in Chrome super, auch wenn es nicht ganz das ist, was ich mir vorgestellt habe, aber das wäre nicht so schlimm (brauche das quasi als gametime für ein JS-spiel).

    Doch leider scheint es im IE8 überhaupt nicht zu wollen :(

    Ich vermute mal, das liegt an setTimeout();, da hab ich bei google viele andere gefunden, die meinten, das funktioniert da nicht.

    Für meine Zwecke perfekt wäre sowas wie setInterval();, aber das funktioniert erst recht nicht.

    btw, habe ich 24h mehr zeit bekommen ^^
  7. g****e

    Das
    setTimeout
    ist eigentlich bereits seit IE4 vorhanden.
    Ich habe mir die Mühe gemacht, einen Windows7 Computer aufzugabeln, und dort im IE den Kompatiblitätsmodus für den IE8 und IE5 auf dieser Seite zu testen: http://ggamee.lima-city.de/ie8-timer.html
    Startest du dein Javascript auch NACH dem "load" Event? Nicht, dass du bereits auf die Id zugreifen willst, obwohl das DOM Element noch garnicht vorhanden ist.

    Ansonsten, poste doch mal eine Demo, wie du es benutzt, vllt liegt der Fehler ja woanders.

    Liebe Grüße
  8. Autor dieses Themas

    snhth

    snhth hat kostenlosen Webspace.

    ggamee schrieb:
    ...
    Ansonsten, poste doch mal eine Demo, wie du es benutzt, vllt liegt der Fehler ja woanders.

    Liebe Grüße


    Hab es quasi genau so benutzt, wie du geschrieben hast:

    <html>
        <head>
        <title>The evil Browser from hell</title>
        <script type="text/javascript">
        window.Timer = function(argId, argTime) {
        var el = document.getElementById(argId);
        if (!el) {return null;}
        var running = false;
        var targetTime = null;
        var time = parseInt(argTime);
        function calcTimer() {
        var lasting = targetTime - (Date.now()/1000);
        var min = parseInt(lasting/60);
        var sec = parseInt(lasting%60);
        min = ((min+"").length==1) ? "0"+min : min;
        sec = ((sec+"").length==1) ? "0"+sec : sec;
        el.innerHTML = min + ":" + sec
        if (running && lasting > 0) {window.setTimeout(calcTimer, 500);}
        }
         
        this.start = function() {
        running = true;
        targetTime = (Date.now()/1000)+time;
        calcTimer();
        }
         
        this.stop = function() {
        running = false;
        }
         
        this.setTime = function(argTime) {
        time = parseInt(argTime);
        }
        }
         
         
         
         
        </script>
        </head>
        <body>
        <div id="timerElement"></div>
        <script type="text/javascript">
        var timer1 = new window.Timer("timerElement", 60);
        if (timer1 !==null) {
        timer1.start();
        }
        </script>
        </body>
        </html>


    letzten endes will ich es hier anstelle von setInterval verwenden (vorvorletzte Zeile). Allerdings müsste ich den dann noch etwas umschreiben, sodass er ca alle 0,01 Sekunden die run()-Funktion aufruft.

    Beitrag zuletzt geändert: 26.11.2013 14:25:03 von snhth
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!