前几天,在做一个站时,需要弹出层播放 YouTube 视频。网站采用 jQuery,并使用 Layer[1] 做弹层。需要显示 YouTube 的视频,从简使用 YouTube 简单的 IFrame Player API[2] 调用视频。
JS 代码段如下:
function onPlayerReady(event) {
event.target.playVideo();
}
var player;
layer.open({
type: 1,
title: false,
closeBtn: 0,
area: ['800px', '450px'],
content: '<div id="player"></div>',
shadeClose: true,
skin: 'layer-video',
success: function(){
player = new YT.Player('player', {
height: '450',
width: '800',
videoId: 'M7lc1UVf-VE',
events: {
'onReady': onPlayerReady,
}
});
}
});
网页使用中出现个小问题,就是弹层中的 YouTube 视频全屏后看不到了。实际上它是已经有执行全屏操作的,理所当然想到 CSS 的定位问题。我记得之前使用自己写的弹层并播放腾讯视频全屏没问题,问题可能在于 Layer。
我在 YouTube API 文档里找不到全屏的相关 event,后来发现直接监听网页的全屏事件即可,具体可以看 Fullscreen API[3]。我的想法是监听全屏,当有全屏时操作 DOM,让视频能显示出来。
调试来调试去心好累,搞得都想放弃 Layer,直接为这视频写个简单的弹出层。后来灵机一动,直接把弹层的主容器作为 YouTube API 操作的容器。也即:
function onPlayerReady(event) {
event.target.playVideo();
}
var player;
layer.open({
type: 1,
title: false,
closeBtn: 0,
area: ['800px', '450px'],
shadeClose: true,
skin: 'layer-video',
success: function(){
var playerId = $('.layer-video').attr('id');
player = new YT.Player(playerId, {
height: '450',
width: '800',
videoId: 'M7lc1UVf-VE',
events: {
'onReady': onPlayerReady,
}
});
}
});
问题解决。
参考资料
本文历史
- 2017 年 09 月 06 日 完成初稿
最近更新
猜你喜欢
与本文不相关的留言,请发留言本谢谢。