这是食谱:
1)。将 youtube's player API 加载到您的页面中。
2)。创建 3 个函数:
-
onYouTubePlayerAPIReady - 监听 youtube 的 API:
function onYouTubePlayerAPIReady() { .. }
然后将您的fancybox初始化代码(包括.ready()方法)放在这个函数中,例如:
function onYouTubePlayerAPIReady() {
$(document).ready(function () {
$('.fancybox-media').attr('rel', 'media-gallery').fancybox({
// fancybox API options
... etc.
}); // fancybox
}); // ready
}
-
onPlayerReady - 监听 youtube 的播放器:
function onPlayerReady(event) {
event.target.playVideo();
}
-
onPlayerStateChange - 监听 youtube 的播放器变化,包括视频结束。这里我们称之为fancybox close 方法:
function onPlayerStateChange(event) {
if (event.data === 0) {
$.fancybox.close();
}
}
3)。现在使用 fancybox beforeShow 回调将最后 2 个函数绑定到您的 fancybox (youtube) 内容,例如:
beforeShow: function () {
var id = $.fancybox.inner.find('iframe').attr('id');
var player = new YT.Player(id, {
events: {
onReady: onPlayerReady,
onStateChange: onPlayerStateChange
}
});
}
见JSFIDDLE
编辑(2014 年 2 月 3 日):
@fightstarr20 说:
此方法似乎不适用于 iPhone 或 iPad,知道为什么吗?
似乎 youtube 将 iOS 设备中播放的视频转换为 HTML5 格式。不知何故,函数内部的自动播放选项
function onPlayerReady(event) {
event.target.playVideo();
}
... 不让 youtube 正确转换视频,它只是挂起。
另一种解决方案是检测移动设备并仅对桌面代理执行event.target.playVideo();,因此您可以这样做
// detect mobile devices features
var isTouchSupported = 'ontouchstart' in window,
isTouchSupportedIE10 = navigator.userAgent.match(/Touch/i) != null;
function onPlayerReady(event) {
if (!(isTouchSupported || isTouchSupportedIE10)) {
// this is NOT a mobile device so autoplay
event.target.playVideo();
}
}
请参阅 forked JSFIDDLE,它应该适用于 iOS 和桌面设备。
注意:您可以添加您喜欢的设备检测方法。到目前为止,我发现我的方法简单可靠。