每60秒启动一次事件(JavaScript)

时间:2012-06-16 16:50:19

标签: javascript

我有一段60秒的视频。我正在努力添加一些JavaScript,以便将数据从我的视频播放器发送到Google Analytics。我要做的是在一段时间内每60秒发起一次活动。

因此,例如,用户在视频中观看21到40秒,我想只启动一个事件(而不是19秒时间内19次)。然后用户观看41到60秒的视频,我想只发一个事件。我实际上已经把这部分想出来了。

问题出在时间上。因此,如果用户观看21到40秒,就会启动一个事件。他们观看视频的其余部分并进行精神处理并决定“嘿,我想再次观看视频”。如果他们再次观看视频,那么除非他们刷新页面,否则21到40秒的那个事件将不会再次启动。

如何编辑我的脚本,以便特定范围每60秒仅启动一次事件?

<script type="text/javascript">
function Follow( minimum, maximum )
{
this.min = minimum;
this.max = maximum;
this.done = false;
}
var following = [
new Follow( 1, 20 ),
new Follow( 21, 40 ),
new Follow( 41, 60 )
]; 

player().Time(
function(event) 
{
    var gone = Number(event.secondspassed);
    for ( var t = 0; t < following.length; ++t )
    {
        var Follow = following[t];
        if ( gone >= Follow.min && gone < Follow.max )
        {
             if ( ! Follow.done )
             {
                 var range = Follow.min + " Seconds Watched ";
                 _gaq.push(['_trackEvent', range, 'Play', 'Title']);
                 Follow.done = true; 
             }
             break;
        }
    }
}
);
</script>

3 个答案:

答案 0 :(得分:0)

使用javascript的setTimeout功能。

答案 1 :(得分:0)

您可以将this.last添加到关注对象,并记录上次Follow被解雇的时间。

function Follow( minimum, maximum ){
    this.min = minimum;
    this.max = maximum;
    this.done = false;
    this.last = 0;
}

然后在你的功能中,你可以检查它自上次解雇以来是否已超过一分钟:

var Follow = following[t];
if((new Date).getTime() > Follow.last + 60000)
    Follow.done = false;

最后,当您将Follow.done设置为true时,还要将其上次触发时间设置为当前时间:

Follow.done = true; 
Follow.last = (new Date).getTime();

上面的代码可以满足您的要求,但我不确定这将在一分钟之后处理暂停和继续视频的效果。在那种情况下,它可能也会两次触发事件。

答案 2 :(得分:-1)

这样的事情很有用:

function yourFunction() {
        // Do whatever you need
        setTimeout('yourFunction()', 60000);
}