1

在我的页面初始化脚本中,我有以下代码:

var iframe = document.getElementById('video');
var player = Froogaloop(iframe);
player.addEvent('ready', function() {
    player.addEvent('play', function() {
        console.log('Played video');
    });
    player.addEvent('pause', function() {
        console.log('Paused video');
    });
    player.addEvent('finish', function() {
        console.log('Finished video');
    });
});
<script src="//f.vimeocdn.com/js/froogaloop2.min.js"></script>
<iframe id="video" src="//player.vimeo.com/video/132283541?title=0&amp;byline=0&amp;portrait=0&amp;color=e00400&amp;api=1&amp;player_id=video" width="200" height="150" frameborder="0" crossorigin="anonymous" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>

视频结束后,我会同时收到一份暂停事件报告和一份完成事件报告。有谁知道这是为什么?如果我的代码没有问题,是否有解决方法,使用超时或类似的方法?

4

1 回答 1

0

我将 js 片段更改为如下所示:

var iframe = document.getElementById('video');
var player = Froogaloop(iframe);
player.addEvent('ready', function() {
    var pauseEvent = null;
    var finishEvent = null;
    player.addEvent('play', function() {
        console.log('Played video');
        pauseEvent = null;
        finishEvent = null;
    });
    player.addEvent('pause', function() {
        pauseEvent = setTimeout( function() {
            console.log('Paused video');
        }, 5);
        if (finishEvent) {
            clearTimeout(pauseEvent);
        }
    });
    player.addEvent('finish', function() {
        finishEvent = setTimeout( function() {
            console.log('Finished video');
        }, 5);
        if (pauseEvent) {
            clearTimeout(pauseEvent);
        };
    });
});

这行得通,尽管我认为人们可以看到它有点令人费解。有两个 clearTimeout 调用,因为我们无法确定报告“完成”和(虚假)“暂停”的顺序是否与检测到它们的顺序相同。

虽然我希望这对其他人有所帮助,但我确信这不是这个神秘问题的最终决定。

于 2016-01-29T19:01:31.440 回答