2013-05-02 5 views
8

Ich bin die Verwendung JWPlayer. der Spieler, den ich Zuhörer auf einige Ereignisse nach dem Setup hinzufügen müssen, ein Beispiel, das ich wie so events.JWPLAYER_MEDIA_TIME hören zu geben:Wie entferne ich einen Event-Handler von der JWPlayer-Instanz?

jwplayer('video-container').onTime(this.onTimeHandler); 

Nach einer Weile ich müssen dieses Ereignis-Listener entfernen, das Lesen der documentation I couldn‘ Ich finde keine Lösung.

+0

hast du 'jwplayer ('video-container') probiert. OnTime (null);' ?? – yogi

+0

hi @ yogi, es funktioniert nicht. Die 'jwplayer.onTime()' bindet eine Funktion an ein Ereignis, ich kann keinen Weg finden, diese Bindung zu entfernen ... –

Antwort

8

Looking at the code, scheint es nicht möglich, einen Ereignis-Listener zu entfernen: Ein Callback wird auf ein Array geschoben, wenn Sie onTime (oder eine der anderen Methoden zum Einrichten von Event-Handlern) aufrufen. t überschreibt einen vorherigen Listener, fügt dem Array jedoch nur einen neuen Listener hinzu.

Vielleicht eine Alternative könnte sein, ein Flag zu setzen, sobald Ihre Zuhörer nicht seine Aufgabe erfüllen mehr hat:

onTimeHandler : function() { 
    if (! this.handleOnTimeEvents) 
    return; 
    ... 
} 
+0

Danke @robertklep, das ist, was ich atm mache, aber ich musste eine finden Um den Listener vollständig zu entfernen, sieht es nicht schön aus, wenn Sie onTime mehrere Listener hinzufügen (die etwa 10 Mal pro Sekunde aufgerufen werden) und weiterhin globale Flags hinzufügen, die die Ausführung des Codes verhindern. Wie gesagt "it_works! = Is_pretty";) (gewählt, um eine funktionierende Lösung zu finden) –

0

Hier ist, wie ich es behandelt. Erstellen Sie eine Pseudofunktion, deren einziger Zweck es ist, ein Zeiger zu sein. Ich war mit dem onComplete Ereignisse betrifft, so schrieb ich den Code wie so unten:

function createJWPlayer(surl, stitle, autos, pw, ph) { 
    jwplayer("videocontainer").setup({ 
     file: surl, 
     title: stitle, 
     width: pw, 
     height: ph, 
     autostart: autos, 
     stretching: "uniform", 
     skin: "/Scripts/JWPlayer/six.xml" 
    }); 
    jwplayer().onComplete(function (e) { 
      jwcompleteevent(e); 
     }); 
} 

function jwcompleteevent(e) { 
    // method to remain empty, sole purpose is to provide a pointer for the handler 
} 

Dann in der Funktion, wo ich es erstellt, schrieb ich folgende:

var mcomplete = (selobj.HasQ == false) ? InterActNoTimeAutoS : jwpCompleteInterA; 
createJWPlayer(selobj.Upath, ti.TestTitle, true, "100%", "100%"); 
jwcompleteevent = mcomplete; 

Wenn ich brauchte ein anderes zu laden Video, würde ich tun, um dieses

mcomplete = (selobj.HasQ == false) ? InterActNoTimeAutoS : jwpCompleteInterA; 
jwcompleteevent = mcomplete; 
loadJwPlayerUrl(selobj.Upath, true); 

Wenn jemand ein Problem mit diesem sieht, bitte sagen sie mir, es scheint zu funktionieren wie in der Entwicklungsumgebung benötigt

Verwandte Themen