2013-05-15 10 views
9

Ich möchte ein einfaches Ereignis auslösen, wenn mein Video fertig ist. Ich habe das direkt unter meinem Video-Tag platziert.beendet event videojs funktioniert nicht

 <script type="text/javascript"> 
     var myPlayer = videojs("session_video"); 
      videojs("session_video").ready(function(){ 
      this.addEvent("ended", function(){ 
      alert('Here I am'); 
      }); 
     });  
    </script> 

Allerdings erhalte ich: Typeerror: this.addEvent keine Funktion ist, und ich kann, warum nicht finden.

Sie können es hier leben: 78.47.121.50 (stackoverflow wird nicht erlauben, dass eine Verbindung zu machen) Code 01-01-01-2012 eingeben, um das Video zu holen.

Jeder Einblick ist viel aprikatisiert!

Mit freundlichen Grüßen, Jason.

+0

was ist VideoJS? – Anoop

+0

Es könnte ein 'this' Problem sein, da die' ready' Methode asynchron zu sein scheint. Worauf bezieht sich "this"? Auf welchem ​​Objekt erwarten Sie, dass die Methode 'addEvent' vorhanden ist? –

+0

@Sushil Es ist ein Video-Player, der HTML, JS und Flash zu einem universellen Player kombiniert. (siehe: http://videojs.com) –

Antwort

46

"addEvent" und "removeEvent" wurden durch "on" und "off"

Versuch ersetzt:

this.on("ended", function(){ 
+1

Hallo Lyn, das hat den Trick gemacht! Vielen Dank dafür :) Können Sie mir sagen, wo Sie diese Informationen gefunden haben? Ich konnte es in den Dokumenten nicht finden. –

+0

Ich habe es als den letzten Commit Kommentar im Github Repo für das Projekt festgestellt. nur Zufallsglück wirklich. –

+0

Nun, vielen Dank für das Teilen! Stupid die nicht in der Dokumentation enthalten ... Ich versuche jetzt, ein Plugin für videojs zu integrieren, aber es ist immer noch mit addEvent und _V_ Würdest du wissen, ob ich das nur für on/off & videojs ersetzen könnte? –

5

Für diejenigen, die immer noch Probleme mit ended Ereignisse in einigen Browsern Sie können haben greifen Dieser Fix:

player.ready(function() { 
      var myPlayer = this; 

      playerInstance.on("timeupdate", function(event) { //chrome fix 
       if (event.currentTarget.currentTime == event.currentTarget.duration) { 
        console.log('video ended'); 
       } 
      }); 
    }); 
+0

Mein beendetes Ereignis wird nicht ausgelöst, wenn der Chrome-Browser verwendet wird. Ich habe diesen Fix versucht, aber es scheint nicht zu funktionieren. Ich denke, dass es möglicherweise in die enthalten sein muss: videojs ("video2"). Ready (function() { Wäre das passender? Kann nicht verstehen, warum es auf anderen Browsern aber nicht Chrome funktioniert ... – mvprzy

+0

Absolut, verschiebe dies auf die Bereit-Funktion – Dziamid

+0

Das half mir mit dem seltsamen Chrom-Bug, der manchmal nicht auslöste. Vielen Dank! –

0

Auf Stackoverflow finde ich einen Teil der Lösung das andere Teil finden Sie von Lyn Headley Top-Antwort.

<script type="text/javascript"> 
    //rename subtitle button 
    videojs.addLanguage('de', { 
     "captions off": "Untertitel aus", 
    }); 

    videojs(document.querySelector('video') /* or selector string */, { 
     techOrder: ['html5', 'flash'], 
     controls: true, 
     autoplay: false, 
     preload: 'false', 
     language: 'de', 
     flash: { 
      swf: 'video-js.swf' 
     } 
    }, function(){ 
     // Player (this) is initialized and ready. 
     this.on('ended', function(){ 
      alert('ended'); 
     }); 
     this.on('firstplay', function(){ 
      alert('firstplay'); 
     }); 
    }); 
</script> 

Dies wird Sie am Ende des Videos warnen. legen Sie es unter dem Code Ihres Videos und es sollte funktionieren.

3

Das Ereignis endete wird nicht ausgelöst, wenn der Endbenutzer absichtlich das Video sucht, um das Video als angehalten zu beenden. Ich konnte es so erhalten arbeiten:

<script type="text/javascript"> 
 
     var player = videojs('my_video', {}, function() {}); 
 
     player.ready(function(){ 
 
     var duration_time = Math.floor(this.duration()); 
 
     this.on('timeupdate', function() { 
 
      var current_time = Math.floor(this.currentTime()); 
 
      if (current_time > 0 && (current_time == duration_time)){ 
 
      $('#continue_button').removeAttr("disabled"); 
 
      } 
 
     }); 
 
     }); 
 
    </script>

Verwandte Themen