JavaScript Zeit-Abstandsmessung, dann Aktion ausführen

  • Hallo liebe Community,

    ich hoffe der Titel geht einigermaßen. Javascript ist nicht ganz so mein Steckenpferd, daher hoffe ich auf Hilfe.

    Bei einem Projekt wird über einen Schieberegler (Range) ein Wert abgelesen. Bei jeder Veränderung des Reglers lädt sich via iFrame ein Teil des Contents neu. Der Inhalt des iFrames ist bestimmt durch den angenommenen Wert der Range. Soweit die Gegebenheiten.

    Ich mag nun mein Javascript so umstellen, dass erst (bspw.) zwei Sekunden nach der letzten Veränderung der Schieberegler die Aktualisierung des iFrames vorgenommen wird. Zzt. gibt es eine Funktion get(range), die die Werte des Schiebereglers abnimmt und verarbeitet und die Funktion reload(), die in der get() Funktion aufgerufen wird und halt den iFrame mit den neuen Paramentern lädt. Ich weiß aber nicht ganz, wie ich das idealerweise angehe. Könnt ihr mir helfen?

    Liebe Grüße aus Berlin!
    Phil

    Einmal editiert, zuletzt von TodayIn (28. Juli 2014 um 19:58)

  • ja können wir :)

    - - - Aktualisiert - - -
    edit:
    ich bin zu hibbelig, als dass ich auf die reaktion des flachen witzes warten mag :D

    also was du tun musst ist in der reload zuerst den slider deaktivieren und dann setzt du nen window.setTimeout() mit dem du den slider wieder aktivierst.
    aber wieso nimmst du überhaupt nen iframe? mit ajax kannst du die inhalte direkt in die seite laden ;)

  • Hi Synaptic,

    danke dir. Es ist aber noch nicht ganz was ich suche. Ich will dem User nicht verbieten am Schieberegler rumzuspielen und den irgendwann deaktivieren. Vielmehr würde ich gerne den Zeitpunkt (sicher in millisekunden) der letzten Änderung in einer Variable ablegen und dann, nachdem eine Sekunde vergangen ist (wie prüfe ich das am besten?), die weiteren Aktionen ausführen. Zzt. habe ich recht umfangreiche php Berechnungen im iFrame - ist es empfehlenswert das dann mit Ajax zu machen?

  • klar php wird ausgeführt, bevor das html geschrieben wird.

    dann beschreibe bitte nochmal ganz genau den wunsch-vorgang...
    denn deaktivieren oder später die handlung ausführen ist quasi das gleiche. erst nach zeitpunkt x kann was neues passieren

  • Gerne. Wie folgt:

    Der User kann gerne am Schieberegler rumstellen wie er möchte und solange er möchte (muss er auch, da er eine spezifischen wert einstellen möchte). Damit aber nicht ständig der Content neu lädt, möchte ich den Zeitpunkt der letzten Veränderung festhalten, zwei Sekunden warten, und dann den iFrame erst reloaden.

  • ahh ok, also willst du das laden am laufenden band verhindern :)

    das läuft dann so (pseudocode)

    Code
    var MEINTIMEOUT = null;
    if(sliderMovementHasFinished()){
      window.clearTimeout(MEINTIMEOUT);
      MEINTIMEOUT = window.setTimeout(function(){
         reload();
      }, 2000);
    }

    das macht dann folgendes: immer wenn der slider bewegt wurde, wird ein eventuell bereits gesetzter timeout gekilled und ein neuer gestartet
    da du hier mit nem timeout arbeitest und nicht mit nem interval, wird das ganze auch nur 1 mal ausgeführt.

    wenn jemand den slider bewegt und merkt: "oh shit, falsch", kann er innerhalb dieser 2000milisekunden den regler erneut benutzern und es sollte so passieren, wie ich eben beschrieben hab :)