HTML5 - 播放视频时每隔几秒发生一次火灾事件

时间:2015-10-19 23:12:50

标签: javascript jquery html5 html5-video settimeout

我希望通过跟踪在不同时间间隔内丢弃的用户数量来跟踪视频的用户参与度。

为此,我需要在播放视频时每15秒发一次跟踪事件。

playing事件被触发一次。我需要在视频的整个生命周期中使用的东西。

var _video = $('video')[0],
        timeoutID;
    $(_video).on('playing', function(event){
        timeoutID = window.setTimeout(function() {
            console.log("video is playing");
        }, 15000);
    }).on('ended', function(event){
        console.log("video eneded");
        window.clearTimeout(timeoutID);
    });

3 个答案:

答案 0 :(得分:7)

您可以使用timeupdate事件,只要视频的currentTime发生变化,它就会更新,或者换句话说,它会在视频正在播放时更新,并为您提供用户实际看到的视频数量

var _video = $('video')[0];

$(_video).on('timeupdate', function() {
    var hasPlayedTime = _video.currentTime;
});

var _video = $('video')[0];

$(_video).on('timeupdate', function(event){
  var hasPlayedTime = _video.currentTime;
    
  $('#result').html('<strong>Elapsed : </strong>' + hasPlayedTime);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<video controls="" style="width:240px;height:180px;">
    <source src="http://www.html5rocks.com/en/tutorials/video/basics/devstories.webm" type="video/webm;codecs=&quot;vp8, vorbis&quot;" />
    <source src="http://www.html5rocks.com/en/tutorials/video/basics/devstories.mp4" type="video/mp4;codecs=&quot;avc1.42E01E, mp4a.40.2&quot;" />
</video>
<span id="result" style="position:relative; top: -100px; left: 20px"></span>

要在这样的事件上每15秒钟才行动一次,我们需要添加一些数学和逻辑

var _video   = $('video')[0],
    debounce = true,
    seconds  = 5; // set to 15 instead

$(_video).on('timeupdate', function(event){
    var hasPlayedTime = _video.currentTime;
    var intPlayedTime = parseInt(hasPlayedTime, 10);
    var isFifteen     = intPlayedTime % seconds === 0 && intPlayedTime !== 0;
    
    if (isFifteen && debounce) {
        debounce = false;
        $('#result span').html(intPlayedTime);	
    } else {
        setTimeout(function() {
            debounce = true;
        }, 1000);
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js" controls="controls"></script>
<video controls="" style="width:240px;height:180px; position: relative; top: -20px; float:left">
    <source src="http://www.html5rocks.com/en/tutorials/video/basics/devstories.webm" type="video/webm;codecs=&quot;vp8, vorbis&quot;" />
    <source src="http://www.html5rocks.com/en/tutorials/video/basics/devstories.mp4" type="video/mp4;codecs=&quot;avc1.42E01E, mp4a.40.2&quot;" />
</video>
<span id="result" style="position:relative; top: 70px; left: 20px">
    <p><u>Updates every five seconds</u></p>
    <strong>Elapsed : </strong>
    <span>0</span>
</span>

答案 1 :(得分:3)

使用window.setInterval代替window.setTimeout

$(_video).on('playing', function(event){
        timeoutID = window.setInterval(function() {
            console.log("video is playing");
        }, 15000);
    }).on('ended', function(event){
        console.log("video eneded");
        window.clearInterval(timeoutID);
    });

答案 2 :(得分:0)

我做到了

var lastSecond = null;
var secondsToCallFunction = 20;
$(_video).on('timeupdate', function(e) {
 var seconds = Math.floor(e.target.currentTime);
 if (seconds % secondsToCallFunction  == 0 && lastSecond !== seconds) {
    lastSecond = seconds
    console.log(seconds);
}
});