【问题标题】:Vimeo API firing multiple events on endVimeo API 最终触发多个事件
【发布时间】:2019-04-29 19:17:33
【问题描述】:

我正在使用Vimeo API,并且文档指出,使用以下代码来捕捉视频的结尾

player.on('ended', function(data) {
  // `data` is an object containing properties specific to that event
});

效果很好,但是当视频结束时,vimeo 视频播放器会停止视频(显然),但会将进度放回 0.00。

因此,pause 和 seeked 事件也会被触发,这意味着当视频结束时,触发的事件如下所示

它触发pause 和seeked 事件是有道理的,但它远非理想。我想发送一个 ajax 请求来保存进度,这意味着如果我监听 ended 事件,它将触发 3 次。

以前有没有人遇到过这个问题并想出办法解决它?

【问题讨论】:

  • 也遇到了这个。根本不是很理想,几乎没有办法区分它们。
  • @user1842315 将在我的工作中发布答案
  • 我也有这个问题。 vimeo js sdk git repo 已经有关于这个问题的错误报告?有谁知道吗?
  • @AdrielWerlich 不要认为目前有解决方案,请查看底部我自己的答案,了解我使用的解决方法,目前仍在工作!

标签: javascript vimeo vimeo-api


【解决方案1】:

据我所知,无法直接使用 API 解决此问题,我解决此问题的方法是查看进度,检查视频何时接近完成并删除绑定并将进度设置为完成。

videoPlayer.on('progress', (data) => {
//If the player percent is over 0.95, updateProgress to 100% and remove all listeners
    if(data.percent > 0.95){
        //Manually set the data to 100
        data.percent = 1;
        //Remove the listeners
        videoPlayer.off('pause');
        videoPlayer.off('seeked');
        videoPlayer.off('progress');
        //Update the progress to be 100
        updateProgress(data, 'seeked');
    }
})

无论如何,这对我的场景来说是一个更好的解决方法,因为我们的视频最后有演职员表,而用户最终在演职员表期间点击了视频,这意味着该视频在技术上从未被标记为完整。

【讨论】:

  • 我遇到了类似的问题,最终改用 timeupdate 事件,因为 progress 数据似乎是指已加载/缓冲的视频量,而不是已经过去了。
【解决方案2】:

我在使用 API 在跟踪代码管理器中触发 GA 事件时遇到了类似的问题。它在ended 事件的每一侧生成两个额外的pause 事件。最后,我不得不检查事件标签和percent 值,如果它们分别等于pause 和1,我忽略了该事件。工作得很好。也许可以为seeked 事件做类似的事情,检查percent 是否等于0 并在1 事件中关注pause?

【讨论】:

    猜你喜欢
    • 2013-12-04
    • 1970-01-01
    • 2014-09-11
    • 2021-08-19
    • 2013-03-18
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多