0

ここでは、ユーザー全体のビデオの総再生回数を数えることについて、たくさんのおしゃべりを見てきました。それは私が必要とするものではありません。

ユーザーがビデオを見て、2 つの写真から選択する Web ベースの実験を開発しています。ビデオをクリックして再生するオプションがあり、選択する前に特定のビデオを再生した回数を追跡したいだけです。このスクリプトは、ビデオが終了するまで再生できないように設計されており、終了した時点でマウスをクリックすると最初から再生されます。

試行 1: イベント リスナーを使用して、onplay が発生したときにカウンターをインクリメントします。
問題 1: addeventlistener 関数内にインクリメント関数があると、ループのような動作が発生していました。毎回 1 回インクリメントする代わりに、カウンタは現在の値に等しい回数だけインクリメントします。良くないですよ。

試行 2: addlistener ステートメントからインクリメント ステートメント/関数を取り出します。問題 2: これは適切なインクリメントを生成しますが、PLAYS の数ではなく、CLICKS の数をカウントするだけです。たとえば、ユーザーがダブルクリックすると、カウンターはそれを「2」として登録しますが、ビデオは応答として 1 回だけ再生されます。

Attempt 1 の方がマークに近かったと確信しているので、そのための私のコードを次に示します。おそらく誰かが、なぜこのような愚かな結果が得られるのか教えてくれるでしょうか? しゃれが意図されています。このコードは両方の問題を示しています。ループしているかのようにインクリメントし、再生ではなくクリックをカウントします。1 つ目はもっと不思議ですが、2 つ目の問題を解決するのに苦労しました。どなたか両方解ける方がいらっしゃいましたらよろしくお願いします!

私の問題の一部は、「onclick」を介して PlayVideo() 関数を呼び出しているという事実に起因する可能性があります。問題が少なくなるように設定する他の方法を受け入れます。

PS また、多くのユーザーは動画が終了する前に選択を行う可能性が高いため、動画が終了する回数も数えたくありません。増分は早い段階で行う必要があります。

        function PlayVideo(){
        var myVideo = document.getElementsByTagName('video')[0];          
        myVideo.play();
        myVideo.addEventListener('playing', function(){
            viewcounter++}, false);
        console.log(viewcounter);
        //myVideo.addEventListener('onplay', viewcounter++);
    }
4

3 に答える 3

0

視聴者が特定の時点を通過した回数をカウントすることもできます (または複数の時点カウンターを追加します)。

var triggerTime=1, fired=0;

function PlayVideo(){
myVideo.addEventListener("timeupdate", function () {
       var timer = myVideo.currentTime.toFixed(2) ;
       if (timer > triggerTime) {
            if (!fired) {
                viewcounter++;
                fired=true;
            }
       }
myVideo.addEventListener('ended', function(){fired=false;}, false);
}
于 2013-11-01T19:04:44.377 に答える
0

これは実際には回避策というほどの答えではありませんが、誰かが同様の問題を抱えている場合に備えて:

基本的に、ビデオの再生が終了した後の最初のクリックまでインクリメント機能を抑制する方法が必要でした。そのために、追加の変数 ("fired" という名前) を作成し、それを false に初期化しました。インクリメント関数は、"fired" = false の場合にのみ呼び出されます。一度発火したら、発火 = true に設定します。次に、イベント リスナーを使用して、ビデオの終了後に false に戻します。それは醜いですが、うまくいきます。

誰かがより良いアイデアを持っているなら、私はすべての耳です!

var fired = false;

function PlayVideo(){
            var myVideo = document.getElementsByTagName('video')[0];          
            myVideo.play();
            StartTimer();
            if (!fired) {
                viewcounter++; //in other words, increment the first time it's clicked, but then not again until after the variable has been reset to false, which happens at the end of the video.
            }
            fired = true;
            console.log(viewcounter);
            myVideo.addEventListener('ended', function(){fired=false;}, false);
于 2013-10-08T18:04:15.297 に答える