javascript - 控制Bxslider中的youtube视频自动播放并在播放完毕后滑动到下一张幻灯片

标签 javascript youtube youtube-api bxslider

我正在尝试在 iframe 中控制 youtube 视频。视频位于 Bxslider结构。我将 slider 设置为自动启动,其中包含 iframe 视频。

我想做的是,当“currentSlide”是视频幻灯片时,自动播放它并在视频结束后“转到下一张幻灯片”。因此,请卡住幻灯片直至视频完成。

我已经尝试过,但它只在第一次加载时起作用,当 slider 返回到第一张幻灯片时,视频和 slider 本身都不再自动播放/卡住。问题是没有错误消息..

HTML

<ul class="bxslider" id="main-slider">
  <li>
    <iframe width="1280" height="720" src="https://www.youtube.com/embed/zwZkhCP9QRY?rel=0&amp;autohide=0&amp;modestbranding=1&amp;showinfo=0&amp;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&amp;autohide=0&amp;modestbranding=1&amp;showinfo=0&amp;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');
  }
}

http://codepen.io/wushan/pen/VvyEGa

最佳答案

让它工作,请参阅此 CodePen

我更改了以下内容:

 function onPlayerStateChange(event) {
  console.log('play Status::::::::' + event.data);
  if (event.data == YT.PlayerState.ENDED && !done) {

/*~~~~~~~~~~~~~~~~~~~~~~~~~删除~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~

** var start = document.getElementsByClassName('bx-start');

** 开始[0].click();

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~*/

//ADD   bx.stopAuto();
        console.log('slider-started');
      } else if (event.data == YT.PlayerState.PLAYING) {

/*~~~~~~~~~~~~~~~~~~~~~~~~~删除~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~

** 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');
      }
    }

关于javascript - 控制Bxslider中的youtube视频自动播放并在播放完毕后滑动到下一张幻灯片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33256659/

相关文章:

javascript - 如何使一个元素上的事件导致另一个元素上的 Bootstrap 弹出窗口?

youtube - 如何获取 YouTube channel 表情符号列表?

xml - Youtube API - 订阅推送通知

javascript - d3js : supply a function to tickPadding

javascript - 来自请求对象的 Node/快速访问记录器

javascript - 单击一个 div 隐藏 div 并替换另一个

python - 如何在 Python 中导入 lib.sort

youtube - 根据观看次数搜索YouTube API

ruby-on-rails-4 - 如何正确使用/配置 YT gem?

javascript - 如何在 jQuery .each() 函数中访问变量?