Hallo JürgenB,
man muss den Eventlistener mit exakt dem gleichen Funktionsobjekt entfernen, womit man ihn angelegt hat. Nicht nur mit gleichen Funktion, sondern mit dem gleichen Objekt.
Das ist - je nach Codeumgebung - nicht ganz so einfach. Beispiel für einen Fallstrick:
function handleOrientation(activate) {
if (activate)
window.addEventListener("deviceorientation", orientationHandler);
else
window.removeEventListener("deviceorientation", orientationHandler);
function orientationHandler(orientationEvent) {
...
}
}
handleOrientation(true);
handleOrientation(false);
Die Deregistrierung wird hier nicht funktionieren, weil die orientationHandler-Funktion lokal in der handleOrientation-Funktion ist und deshalb bei jedem Aufruf von handleOrientation ein neues Funktionsobjekt vorliegt. Falls dein Eventhandler eine inline-Funktion oder eine Pfeilfunktion ist, bist Du sowieso chancenlos, weil dann die registrierte Handlerfunktion nur für den Moment der Registrierung in deinem Codebereich verfügbar ist.
Wenn Du an window.ondeviceorientation verwendest, wäre es übrigens einfacher, weil - so würde ich behaupten - Du dann einfach ondeviceorientation auf undefined
setzen kannst
Cancelling und Bubbling haben mit einer Deregistrierung übrigens nichts zu tun, aber ich denke, das weißt Du.
Rolf
sumpsi - posui - obstruxi