2016-12-07 12 views
0

私は、特定のページ上のすべてのvideoの要素を取得し、それらにplayingイベントが適用され、次のscriptがありますaddEventListener '再生'は1回だけ発生します。

var video = document.getElementsByTagName("video"); 

for(var i = 0; i < video.length; i++){ 
(function(vid) { 
    vid.addEventListener('playing', function(){ 
     var percentComplete = Math.round((vid.currentTime/vid.duration) * 100); 
     console.log(percentComplete); 
    }); 
}) 
(video[i]); 
} 

私はページを実行し、例えば、ビデオ1をクリックしたときに今、私はpercentCompleteビーイングを見ますconsole logにログオンしましたが、ビデオ1が終了してビデオ2をクリックすると、consoleに何も書き込まれませんでした。このaddEventListenerは、クリックされた最初のビデオにのみ適用されます。なぜか、ビデオが再生されるたびに?

+0

実際のコードが機能するはずなので、問題を再現するライブデモ(StackSnippet®またはfiddle)を提供する必要があります。 @gyreの方が*正しく動作するはずです(今、彼は/彼女の入力ミスを修正しました)*また、 'this'を使うこともできますが、代替解決策は根本的な問題を修正するものではないでしょう。あなたのコードブロック。 – Kaiido

答えて

0

外部クロージャを削除し、リスナ内でevent.targetを使用してみます。

var video = document.getElementsByTagName("video"); 

for (var i = 0; i < video.length; i++) { 
    video[i].addEventListener('playing', function (event) { 
     var vid = event.target 
     var progress = Math.round((vid.currentTime/vid.duration) * 100) 
     console.log(progress) 
    }) 
} 

興味のある人は、the full list of media eventsです。

+0

これは残念ながら問題を解決しません –

+0

「再生」をクリックするたびにイベントリスナーを起動しようとしていますか? – gyre

+0

ビデオ1の再生をクリックすると、たとえばビデオ1の再生が終了し、ビデオ2の再生がクリックされても何も起こされません。 –

関連する問題