0

我在这里看到了很多关于计算用户总视频观看次数的讨论。那不是我需要的。

我正在开发一个基于网络的实验,用户将看到一个视频,然后在 2 张图片之间进行选择。他们可以选择点击视频进行重播,我只想跟踪他们在做出选择之前重播给定视频的次数。该脚本的设计使得视频在结束之前无法重播,此时鼠标单击将从头开始重播。

尝试 1:使用事件侦听器在 onplay 触发时增加计数器。
问题 1:在 addeventlistener 函数中使用增量函数会导致类似循环的行为。计数器不会每次递增一次,而是会递增等于其当前值的次数。不好。

尝试 2:从 addlistener 语句中取出增量语句/函数。问题 2:这会产生很好的增量,但它只计算 CLICKS 的数量,而不是 PLAYS 的数量。例如,如果用户双击,计数器会将其注册为“2”,而视频将仅播放一次作为响应。

我确定尝试 1 更接近标记,所以这是我的代码,也许有人可以告诉我为什么我会得到如此循环的结果?双关语意。这段代码显示了这两个问题:它像循环一样递增,它计算点击次数而不是播放次数。第一个对我来说更神秘,但我很难解决第二个。如果你们中的任何一个都能解决这两个问题,我将不胜感激!

我的部分问题可能源于我通过“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

也许playing改成play

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

每当播放视频时都应该调用它。参考:http ://www.w3schools.com/tags/ref_av_dom.asp

于 2013-10-07T23:36:26.100 回答
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 时才调用增量函数。在它触发一次后,我设置了fired = 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 回答