【问题标题】:Pass youtube iframe api events onstatechange when src changes当 src 更改时传递 youtube iframe api 事件 onstatechange
【发布时间】:2015-11-07 05:23:37
【问题描述】:

所以我想我会用一个工作示例来更新它。我已经放弃了声明 iframe 标签,只是使用 iframe api 创建一个 iframe,然后通过带有数据属性的 id 加载播放器。下面是一个工作示例。因此,现在所有状态更改都通过 youtube 播放器一致地传递。因此脚本会将 iframe 加载到 Div #player 中,您可以使用 jquery 和 javascript 轻松地 loadVideoByID。

<div id="player"></div>
<script>
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 player;
function onYouTubeIframeAPIReady() {
    player = new YT.Player('player', {
        playerVars: { 'autoplay': 0,},
        videoId: 'M7lc1UVf-VE',
        events: {
        'onReady': onPlayerReady,
        'onStateChange': onPlayerStateChange
        }
    });
}
function onPlayerReady(event) {
    alert('started');
}
function onPlayerStateChange(event) {        
     if(event.data === 0) {            
         alert('done');
     }
}
$( document ).on( "click", ".video-link", function(e) {
    e.preventDefault();
    var videoID = $(this).attr('data-videoID');
    player.loadVideoById(videoID);
});
</script>

然后使用具有类似数据属性的链接。

<a href="#" class="video-link"  data-videoID="youtube id here">Link</a>

【问题讨论】:

  • 你如何更改播放器 src?如果您希望播放器播放新视频,我建议您使用 player.loadVideoById('NewVideoID') 播放器的所有事件都应该可以正常工作。如果您想通过控制台记录新视频 ID 以查看控制台“调试/报告”中的更改,请尝试此 console.log(player.getVideoUrl().split('?v=')[1]);
  • 我只是使用像小提琴这样的传统链接并定位 iframe 链接 我会考虑使用 javascript 来改变它.

标签: javascript youtube youtube-iframe-api


【解决方案1】:

除了播放按钮之外,为什么不在播放器准备好时提示播放列表呢?您可以将视频 ID 保存在一个数组中...如果这不是您要查找的内容,请在下方留言,我会尽我所能进行更改。

//Array of videos
var MyVideos=["E6RGMRamAFk","IHQr0HCIN2w","CogIXrea6A4"];
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 player;
function onYouTubeIframeAPIReady() {
    player = new YT.Player('player', {
    events: {
     'onReady': onPlayerReady,
     'onStateChange': onPlayerStateChange
    }
  });
}
function onPlayerReady(event) {
//Player is ready, cue the array of videos into the playlist.
player.cuePlaylist(MyVideos);
}
function onPlayerStateChange(event) {
}

JS Fiddle - Working Demo

YouTube JavaScript Player API Reference

如果您有任何问题,请在下方留言,我会尽快回复您。

我希望这会有所帮助。快乐编码!

【讨论】:

  • 我会,但我会让人们添加到播放列表中,所以我希望播放列表可以点击,以防他们想观看视频乱序,所以我正在研究播放器。 loadVideoById 现在只需将点击事件附加到每个链接。我还是不太清楚我想怎么做谢谢
  • @user3331344 您可以创建一个函数来将新视频添加到数组中,播放器带有一个侧面菜单,可以从播放列表(播放器的左上角)中选择视频。您的问题是如何创建播放列表,如果您想在播放列表中添加更多内容,您可以将更多视频插入播放器。我将在 API 参考的答案中添加一个链接,所有内容都在其中。
猜你喜欢
  • 2014-08-28
  • 2017-02-28
  • 1970-01-01
  • 2014-02-23
  • 2015-10-13
  • 2013-06-09
  • 2014-09-22
  • 2011-01-26
相关资源
最近更新 更多