我正在尝试控制iframe中的YouTube视频。视频采用Bxslider结构。我将滑块设置为自动启动,其中包含iframe视频。
我想做的是当“currentSlide”是一个视频幻灯片时,自动播放它并在视频完成后转到下一张幻灯片。所以冻结幻灯片直到视频结束。
我已经尝试了但是它只在第一次加载时才有效,当滑块返回到第一张幻灯片时,视频和滑块本身都不再自动播放/冻结。问题是没有错误消息..
HTML
<ul class="bxslider" id="main-slider">
<li>
<iframe width="1280" height="720" src="https://www.youtube.com/embed/zwZkhCP9QRY?rel=0&autohide=0&modestbranding=1&showinfo=0&enablejsapi=1" frameborder="0" enablejsapi="1" allowfullscreen="" id="fitvid0"></iframe>
</li>
<li>
<iframe width="1280" height="720" src="https://www.youtube.com/embed/ZLls1Wn6070?rel=0&autohide=0&modestbranding=1&showinfo=0&enablejsapi=1" frameborder="0" enablejsapi="1" allowfullscreen="" id="fitvid1"></iframe>
</li>
</ul>
JS
// Load YouTube Frame API
(function(){
var s = document.createElement("script");
s.src = "http://www.youtube.com/player_api";
var before = document.getElementsByTagName("script")[0];
before.parentNode.insertBefore(s, before);
})();
var mainslider = $('#main-slider').bxSlider({
speed: 1000,
mode: 'fade',
pager: false,
auto: true,
autoControls: true,
infiniteLoop: true,
// pause: pause,
adaptiveHeight: true,
onSlideBefore: function() {
},
onSliderLoad: function() {
console.log('Slider loaded');
slideInit();
},
onSlideAfter: function() {
currentPos();
}
});
function slideInit() {
var currentNum = mainslider.getCurrentSlide();
console.log('slide:' + currentNum);
if ($('#main-slider li').eq(currentNum).find('iframe').length > 0) {
var getFrame = $('#main-slider li').eq(currentNum).find('iframe').attr('id');
console.log('video id:' + getFrame);
onYouTubeIframeAPIReady(getFrame);
console.log('data sended');
}
}
//Get Video frame
function currentPos() {
var currentNum = mainslider.getCurrentSlide();
console.log('slide:' + currentNum);
if ($('#main-slider li').eq(currentNum).find('iframe').length > 0) {
var getFrame = $('#main-slider li').eq(currentNum).find('iframe').attr('id');
console.log('video id:' + getFrame);
onYouTubeIframeAPIReady(getFrame);
console.log('data sended');
}
}
function onYouTubeIframeAPIReady(id) {
player = new YT.Player(id, {
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}
function onPlayerReady(event) {
event.target.playVideo();
console.log('player triggered');
}
function onPlayerStateChange(event) {
console.log('play Status::::::::' + event.data);
if (event.data == YT.PlayerState.ENDED && !done) {
var start = document.getElementsByClassName('bx-start');
start[0].click();
console.log('slider-started');
} else if (event.data == YT.PlayerState.PLAYING) {
var stop = document.getElementsByClassName('bx-stop');
stop[0].click();
console.log('slider-stopped');
} else if (event.data == YT.PlayerState.CUED) {
event.target.playVideo();
console.log('come here cued');
}
}
答案 0 :(得分:2)
让它工作,请参阅此CodePen
我更改了以下内容:
function onPlayerStateChange(event) {
console.log('play Status::::::::' + event.data);
if (event.data == YT.PlayerState.ENDED && !done) {
/ * ~~~~~~~~~~~~~~~~~~~~~~~~~ REMOVE ~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~
** var start = document.getElementsByClassName('bx-start');
** start [0] .click();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~ * /
//ADD bx.stopAuto();
console.log('slider-started');
} else if (event.data == YT.PlayerState.PLAYING) {
/ * ~~~~~~~~~~~~~~~~~~~~~~~~~ REMOVE ~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~
** var stop = document.getElementsByClassName('bx-stop');
**停止[0] .click();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ * /
//ADD bx.startAuto();
console.log('slider-stopped');
} else if (event.data == YT.PlayerState.CUED) {
event.target.playVideo();
console.log('come here cued');
}
}