我正在使用Vimeo API,并且文档指出,要捕获视频的结尾,请使用以下代码
before_save :serialize_properties
private
def serialize_properties
properties = { full_name: full_name, mobile: mobile }
end
效果很好,但是当视频结束时,vimeo视频播放器停止了视频(显然),但是将进度恢复为0.00。
正因为如此,player.on('ended', function(data) {
// `data` is an object containing properties specific to that event
});
和pause
事件也会被触发,这意味着当视频结束时,触发的事件看起来像这样
为什么它也会触发seeked
和pause
事件很有意义,但这远非理想。我要发送ajax请求来保存进度,这意味着如果我监听seeked
事件,它将触发3次。
以前有没有人遇到过这种情况并想出办法了?
答案 0 :(得分:1)
使用API触发代码管理器中的GA事件时,我遇到了类似的问题。它正在pause
事件的每一侧生成另外两个ended
事件。最后,我不得不检查事件标签和percent
的值,如果它们分别等于pause
和1
,我将忽略该事件。运作良好。也许对于seeked
事件可以做类似的事情,检查percent
是否等于0
并在pause
事件之后跟随1
?
答案 1 :(得分:0)
据我所知,没有办法直接用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');
}
})
无论如何,这对于我的情况来说是一个更好的解决方法,因为我们的视频最后都有字幕,并且用户最终在字幕期间点击了该视频,这意味着该视频在技术上从未标记为完整。