2016-12-14 5 views
3

複数の小さなビデオ要素を1つのWebページで処理するコードを扱っていますが、複数のプログレスバーを同期させるのに問題があります。それぞれの動画と一緒に。エラーsetTimeoutでラップされたときに「未定義のプロパティを読み取れません」

Current jsFiddle prototype

コード$(this).find("progress").attr("value", $("video", this)[0].currentTime);のこの作品は、main関数の内部で動作しているようですが、私はsetTimeoutで別の関数でそれを包むときにプログレスバーが実際に私はこのエラーを取得するアニメーション化:

"Cannot read property 'currentTime' of undefined at function"

私はそれを自分自身で動作させることができるかどうかを確認するためにいくつかのバリエーションを試しましたが、通常のように壁にコードを投げて修正できませんでした。

誰かがこれをやっている理由を教えていただけますか?

+1

これまでの質問を一日中閲覧した後に、何とかして逃した。ポインタありがとう! –

答えて

3

setTimeoutthisは、メインthisではありません。だからあなたのコードは動作しません。 setTimeoutで作業するには、setTimeoutの前にを取得して使用する必要があります。

var that = this; 
setTimeout(function(){ 
// here use that 
},100); 
+1

ビンゴ!親切にありがとう:) –

+0

この値が変更され、タイムアウト内に新しい値が必要な場合はどうなりますか? – Jus10

+0

@ Jus10どのように変更されるのですか? –

0

あなたは、ビデオ再生時間や総時間に進捗最大を変更する必要があります。それを現時点で価値あるものにする。その後に行く

$(document).ready(function(){ 
    var video = $('#YourVideoIDorClass').get(0`); 
    video.addEventListener("onplaying", function() { 
     progress.val = video.currentTime 
    }, false); 

}) 
+0

私の現在のコードは、Surenの答えを統合したので、実際にプログレスバーの 'max'と' value'属性を変更します。あなたのアプローチは間違いなく僕のものよりもエレガントに見えます。だから私はちょっと試してみると最適化するでしょう。親切にありがとう –

関連する問題