Lila: Eventlistener, Funktion ausführen, wenn Zeitspanne > Wert

Beitrag lesen

Hallo,

schön, dass du trotz des wirren Betreffs meinen Beitrag angeklickt hast :)

Ich habe in Javascript zwei Eventlistener, welche über die Library Motion.js überwachen, wenn mein Smartphone geschüttelt wird bzw. das Schütteln beendet wird.

Das Beispiel von der motion.js-Startseite:

//Detect when the user is shaking their device  
window.addEventListener("shakestart", function(){  
	//Make the background a nice pink!  
	document.body.style.background = "#ff00ff";  
}, false);  
  
//Detect when the user has stopped shaking their device  
window.addEventListener("shakeend", function(){  
	//Remove the horrible pinkness!  
	document.body.style.background = "none";  
}, false);

funktioniert soweit. Mich stört jedoch, dass "shakestart" schon bei der kleinsten Bewegung ausgeführt wird. Deshalb habe ich mir gedacht, dass ich die Zeitdifferenz zwischen dem "shakestart-Event" (Handy wird bewegt) und dem "shakeend-Event" (Handy ruht) nehme und eine Funktion erst dann ausgeführt wird, wenn diese größer als bspw. 3 Sekunden ist (das Handy also 3 sek. am Stück gerüttelt wurde).

Theoretisch ganz einfach, aber praktisch für mich auch nach 3 Std. Try-And-Error noch ein ungelöstes Problem.

Die Startzeit konnte ich noch ermitteln.

window.addEventListener("shakestart", function(){  
// Startzeit ermitteln  
var startZeit = new Date();  
			  
//Testausgabe  
alert(startZeit.getTime();  
}, false);

Im gleichen Stil könnte ich auch die Endzeit für sich allein ermitteln. Aber wie bekomme ich es hin, dass der zweite Eventlistener "shakeend" nur ausgeführt wird, wenn "shakestart" schon gestartet ist. Ich habe versucht den Eventlistener innerhalb der Startfunktion einzubauen, aber da funktioniert der Eventlistener scheinbar nicht, zumindest wird in der Praxis dessen Funktion nicht aufgerufen.

Ein weiterer Versuch war, die jeweilen Startzeiten mit return auszugeben, dann die Differenz  zu nehmen und über if bei einer gewissen Differenz eine Funktion auszuführen, aber das haute auch nicht hin. Die eventlistener schienen garnicht mehr zu funktionieren, wenn ich diese in der Art var startzeit = window.addEventListener(...) { ... return zeit} eingebaut habe. Irgendwie bin ich dann auch immer an einen Punkt angekommen, wo die Funktion sich immer wieder hätte selbst aufrufen müssen.

Ich bin wirklich für jeden Hinweis dankbar, wie ich das Problem lösen kann.

Vielen Dank :)