YouTube 的iFrame 嵌入 JS 播放器 API允许您向某些事件添加回调。我想添加一个回调,以便选择视频末尾的相关视频。
更具体地说,当查看嵌入中的视频时,最后它会显示嵌入中的相关视频。我想在选择其中之一时运行一些代码。如何实现?我看到有一个 onStateChange 但没有一个状态与相关视频相关。我是否需要为 YT.PlayerState.PLAYING 添加 onStateChange,然后将播放视频与原始视频进行比较,看看它们是否有所不同?
YouTube 的iFrame 嵌入 JS 播放器 API允许您向某些事件添加回调。我想添加一个回调,以便选择视频末尾的相关视频。
更具体地说,当查看嵌入中的视频时,最后它会显示嵌入中的相关视频。我想在选择其中之一时运行一些代码。如何实现?我看到有一个 onStateChange 但没有一个状态与相关视频相关。我是否需要为 YT.PlayerState.PLAYING 添加 onStateChange,然后将播放视频与原始视频进行比较,看看它们是否有所不同?
这对我来说似乎是一个合理的解决方案。
唯一值得一提(您已经注意到)的一点是,您将无法判断视频的变化是否是由于用户点击了相关视频,但如果您没有与播放器动态交互,比较以前的 VideoID 就足够了。
请注意,如果您对简化一些回调/事件处理工作的 jQuery 插件感兴趣,请查看:https ://github.com/nirvanatikku/jQuery-TubePlayer-Plugin
我最终基本上按照我描述的方式进行了操作。这是我使用的代码:
started = false;
var onYouTubeIframeAPIReady = function(id) {
var player = new YT.Player('player', {
videoId: id,
events: {
'onStateChange': function (event) {
if (event.data == 1) { // The video started playing
started = true;
}
if (started && event.data == -1) {
// Video had already started playing before and is now in
// "unstarted" state so it must be a new video.
var video_url = event.target.i.videoUrl;
var video_id = video_url.replace('http://www.youtube.com/watch?v=', '').replace('&feature=player_embedded', '');
window.location = '#/view/' + video_id;
}
}
}
});
}
所以基本上,当视频开始播放时,您将“开始”变量设置为 true。然后,如果/当视频进入“未启动”状态时,如果“已启动”为真,那么您就知道这是一个刚刚开始播放的新视频。在这种情况下,从 event.target 对象中获取它的视频 ID,然后用它做任何你想做的事情。
如果有人想查看上下文,我的完整提交就在这里,您可以在http://toogl.es上看到它的实际效果。