当用户单击浏览器中的另一个选项卡时,我想暂停视频。我曾尝试使用 Youtube 和 Vimeo 来做到这一点。
这是javascript背后的基本思想:
对于 Youtube:
//YouTube
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var youtubePlayer;
var onYouTubeIframeAPIReady = function() {
youtubePlayer = new YT.Player('youtube', {
height: '390',
width: '640',
videoId: 'sXtekwuT8R0',
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
};
var onPlayerReady = function(event) {
event.target.playVideo();
};
var onPlayerStateChange = function(event) {
if (event.data == YT.PlayerState.PLAYING) {
parent.focus();
window.onblur = function() {
status.text("You went away!");
youtubePlayer.stopVideo();
};
}
};
对于 Vimeo(使用他们的 Froogaloop 库):
$(function() {
//Vimeo
var iframe = $('#vimeo');
var vimeoPlayer = $f(iframe[0]);
var status = $('#status');
vimeoPlayer.addEvent('ready', function() {
vimeoPlayer.addEvent('play', function(){
status.text("Playing!");
parent.focus();
window.onblur = function() {
status.text("You went away!");
vimeoPlayer.api("pause");
};
});
});
});
以下是这些尝试的一些 codepen 示例:
优酷:http : //codepen.io/earlonrails/pen/jugAm
Vimeo: http ://codepen.io/earlonrails/pen/KBAmd
如果单击播放按钮后,单击 iframe 的父文档,然后单击不同的窗口或选项卡,这两个示例都将起作用。Youtube 示例在首次加载时也可以使用,但如果您单击播放然后暂停然后播放,则不会。我相信这两个问题都是由于您单击 iframe 造成的,因此该事件要么同时触发,要么因为无法在此处捕获事件而无法触发。我认为使用通过 iframe 发送的 postMessages 以及回调可以完成这项工作,但可惜我无法弄清楚这一点。