2013-05-15 3 views
9

Я хотел бы вызвать простое событие, когда мое видео будет закончено. Я разместил это прямо ниже моего тега видео.завершено событие videojs не работает

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

Однако я получаю: TypeError: this.addEvent не является функцией, и я не могу найти почему.

Вы можете увидеть его здесь: 78.47.121.50 (stackoverflow не позволит сделать ссылку) введите код 01-01-01-2012, чтобы открыть видео.

Любое понимание очень абрикоса!

С уважением, Джейсон.

+0

что videojs? – Anoop

+0

Это может быть проблема 'this', поскольку метод' ready' представляется асинхронным. Как вы думаете, на что это относится? На каком объекте вы ожидаете присутствия метода addEvent? –

+0

@Sushil Это видеоплеер, который объединяет html, js и flash для создания универсального проигрывателя. (см .: http://videojs.com) –

ответ

46

«addEvent» и «removeEvent» были заменены «на» и «выключен»

попробовать:

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

Привет, Лин, это сделал трюк! Большое спасибо за это :) Не могли бы вы рассказать мне, где вы нашли эту информацию? Я не мог найти его в документах. –

+0

Я заметил это как последнее сообщение о комментировании в репозитории github для проекта. просто случайная удача. –

+0

Хорошо, спасибо за обмен! Глупо, не включайте его в документы ... Теперь я пытаюсь включить плагин для videojs, но он все еще использует addEvent и _V_ Знаете ли вы, если бы я мог просто заменить это для включения/выключения и видео? –

5

Для тех, кто до сих пор есть проблемы с несимметричными событиями в некоторых браузерах можно прибегнуть к это исправить:

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

Заключенное событие не срабатывает при использовании браузера Chrome. Я пробовал это исправление, но он, похоже, не работает. Я думаю, что это может потребоваться включить в: videojs («video2»). Ready (function() { Будет ли это более подходящим? Не могу понять, почему он работает в других браузерах, но не в Chrome ... – mvprzy

+0

Абсолютно, переместите это в готовую функцию. – Dziamid

+0

Это помогло мне с необычной хромированной ошибкой, которая иногда не срабатывала. Благодаря! –

0

On Stackoverflow Я нахожу одну часть решения, другую сторону от Lyn Headley.

<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> 

это предупредит вас о конце видео. поместите его под кодом вашего видео , и он должен работать.

3

завершено Событие не срабатывает, если конечный пользователь намеренно ищет видео, чтобы сохранить видео в паузе. Я был в состоянии получить его работу, как:

<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>

Смежные вопросы