【问题标题】:YouTube API: Multiple Embeds on the Same Page?YouTube API:同一页面上的多个嵌入?
【发布时间】:2014-06-21 09:49:55
【问题描述】:

如何使用 YouTube API 在页面的不同位置嵌入不同的 YouTube 视频? (这意味着他们不能共享相同的<div>“玩家”。)他们还根据不同的onclick 事件在不同的时间开始。当页面上只有一个视频时,我的代码可以正常工作,但对于我的一生,我无法弄清楚让这一切都与 2 个或更多视频一起工作的代码!

起初我试图简单地添加多个代码实例,我希望每个实例都存在,但这不起作用。我读到所有玩家都需要添加到一个<script>,所以我尝试了这个:

(另外,<script> 在页面上的哪个位置以及<div>s 在哪个位置有关系吗?<script> 可以写信给<div>,无论它们在页面上的哪个位置? )

无论如何,这是我正在使用的代码:

// inside other containers with with relative and absolute positioning
// that fadeIn and fadeOut using jQuery
<div id="video1"></div>

// inside other containers with with relative and absolute positioning
// that fadeIn and fadeOut using jQuery
<div id="video2"></div>


<script>
var tag = document.createElement('script');
tag.src = "//www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

var player1;
var player2;

function onYouTubeIframeAPIReady() {
    player1 = new YT.Player('video1',{
                width: '320',
                height: '216',
                videoId: 'VIDEO_ID_1',
                playerVars: {rel: 0, controls: 0, autohide: 1, disablekb: 1, enablejsapi: 1, modestbranding: 1, showinfo: 0 },
                events: { 'onStateChange': onPlayerStateChange1 } });;
    player2 = new YT.Player('video2',{
                width: '320',
                height: '216',
                videoId: 'VIDEO_ID_2',
                playerVars: {rel: 0, controls: 0, autohide: 1, disablekb: 1, enablejsapi: 1, modestbranding: 1, showinfo: 0 },
                events: { 'onStateChange': onPlayerStateChange2 } });; }

function startVideo1() {
            player1.playVideo();
            $('#video_box_B1').delay(1000).fadeIn();
            $("#video_box_B1").delay(20000).hide();
        };
function onPlayerStateChange1(event) {        
            if(event.data === 2) {
                $("#video_box_B1").hide();
            }
        }
function startVideo2() {
            player2.playVideo();
            $('#video_box_E5').delay(1000).fadeIn();
            $("#video_box_E5").delay(20000).hide();
        };
function onPlayerStateChange2(event) {        
            if(event.data === 2) {
                $("#video_box_E5").hide();
            }
        }
</script>

// onclick triggers at various places on the page
<img src="image_1.jpg" onclick="startVideo1()" />
<img src="image_2.jpg" onclick="startVideo2()" />

有没有人能说出我做错了什么?顺便说一句,如果我使用静止图像、纯文本或页面上只有一个视频,那些淡入和淡出的容器效果很好,所以不是那些淡入淡出的容器导致了这种情况。它必须是 YouTube 脚本。有人可以帮忙吗?

【问题讨论】:

  • 函数 startVideo1() 和 startVideo2() 是如何以及何时调用的?
  • 我在当前代码下添加了它们供您参考。我在页面的不同位置使用&lt;img src="image_1.jpg" onclick="startVideo1()" /&gt;&lt;img src="image_2.jpg" onclick="startVideo2()" /&gt;。当只有一个 YouTube API 嵌入时,这非常有效,所以我知道这个触发方法不是问题。问题是我试图在页面上放置多个视频的方式。
  • 阅读您的其他评论,它似乎已经按照您想要的方式工作了。
  • 是的,现在效果很好。谢谢。

标签: javascript jquery html youtube-api


【解决方案1】:

似乎在这个jsbin中工作:

http://jsbin.com/catuhimo/3/edit

您在哪个浏览器中试用?如果您在 Yosemite 上使用 Safari 最新版本 8.0 (10538.39.41),jsfiddle 和 jsBin 在渲染内容时会遇到一些麻烦。我在最新的 Chrome 上试用了您的代码,并用实际的视频 ID 替换了占位符,它工作正常。

这有帮助吗?我错过了你问题的重点吗?根据您的要求,这对我来说似乎没问题。

【讨论】:

  • 我在 Mavericks 上使用 Chrome。我显然不知道我以前在做什么,因为是的,这在 jsbin 中有效。也许我的代码中有一些小错字,我碰巧在这里修复了。我将不得不在我的页面中仔细检查我的代码,或者可能只是从头开始编写它。我不敢相信我一直在回答我自己的问题! :-( 感谢您向我展示了我显然已经知道的内容!
  • 不要为此自责!很高兴它现在可以工作了:)此外,还有一些方法可以重构您的代码,这样您就不必手动构建视频播放器的每个实例;这对您的应用程序/页面有帮助吗?如果它与您的工作相关,我可以稍后发布一些代码
  • 我有一个用于编辑代码的“系统”,尽管每次创建一个嵌入多个 YouTube 的页面时我都必须进行复制。我不确定我需要多少它,但如果其他人在 Google 搜索中找到此页面以寻找他们正在尝试解决的问题,那么您的代码可能会有所帮助。 :-)
猜你喜欢
  • 2015-11-30
  • 1970-01-01
  • 2018-07-15
  • 2018-06-27
  • 2011-01-21
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 2021-09-02
相关资源
最近更新 更多