在JavaScript中暂停YouTube iFrame API

Yah*_*een 13 javascript youtube jquery youtube-api

我在幻灯片中嵌入了Youtube视频,我想在用户点击img缩略图时暂停:

<li><iframe width="430" height="241" src="http://www.youtube.com/watch?v=XjUz8IT0CYg?enablejsapi=1&theme=light&showinfo=0" frameborder="0" allowfullscreen id="my-video"></iframe></li>
Run Code Online (Sandbox Code Playgroud)

我一直在Youtube API上,但我很困惑如何开始.

当我追加?enablejsapi到YouTube末尾时,API JS会自动加载video id吗?

这是我的JS:

var player1 = document.getElementById('my-video');

$('img').click(function () {
  player1.pauseVideo();
})
Run Code Online (Sandbox Code Playgroud)

编辑:

以下是我根据马特的答案做的事情,对于任何想知道的人:

<li><iframe width="430" height="241" src="http://www.youtube.com/embed/XjUz8IT0CYg?enablejsapi=1&theme=light&showinfo=0" frameborder="0" allowfullscreen id="player-1"></iframe></li>

<li><iframe width="430" height="241" src="http://www.youtube.com/embed/HVhSasnVjMQ?enablejsapi=1&theme=light&showinfo=0" frameborder="0" allowfullscreen id="player-2"></iframe></li>
Run Code Online (Sandbox Code Playgroud)

然后是我的JS:

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

// Create YouTube player(s) after the API code downloads.
var player1;
var player2;

function onYouTubeIframeAPIReady() {
    player1 = new YT.Player('player-1');
    player2 = new YT.Player('player-2');
}
Run Code Online (Sandbox Code Playgroud)

然后在document.ready:

$(document).ready(function () {
    $(".slideshow-1 img").click(function () {
        player1.stopVideo();
    });

    $(".slideshow-2 img").click(function () {
        player2.stopVideo();
    });
}
Run Code Online (Sandbox Code Playgroud)

Roi*_*Roi 19

如果你想让你的JS在外部文件中使用:

HTML

<iframe id="player1" class="ytplayer" width="430" height="241" src="http://www.youtube.com/embed/HVhSasnVjMQ?enablejsapi=1&theme=light&showinfo=0" frameborder="0" allowfullscreen></iframe>
<iframe id="player2" class="ytplayer" width="430" height="241" src="http://www.youtube.com/embed/HVhSasnVjMQ?enablejsapi=1&theme=light&showinfo=0" frameborder="0" allowfullscreen></iframe>
Run Code Online (Sandbox Code Playgroud)

JS

var yt_int, yt_players={},
    initYT = function() {
        $(".ytplayer").each(function() {
            yt_players[this.id] = new YT.Player(this.id);
        });
    };
$.getScript("//www.youtube.com/player_api", function() {
    yt_int = setInterval(function(){
        if(typeof YT === "object"){
            initYT();
            clearInterval(yt_int);
        }
    },500);
});
Run Code Online (Sandbox Code Playgroud)

控制视频

yt_players['player_id'].playVideo();
Run Code Online (Sandbox Code Playgroud)

我这样做的原因是因为我通过CMS动态加载视频并以叠加方式打开.我设置了关闭/打开叠加功能来播放/暂停视频.

  • 基于你的代码片段这里是http://jsfiddle.net/av359/的例子非常感谢 (2认同)
  • 上帝保佑你我的朋友! (2认同)

Mat*_*one 13

附加?enablejsapi在嵌入字符串中不会自动包含API代码.它只注册API的特定嵌入.

您想在此处阅读第一个示例:https://developers.google.com/youtube/iframe_api_reference

  1. 异步代码段下载并执行YT iframe API
  2. onYouTubeIframeAPIReady() 在API准备好时触发
  3. 创建一个新YT.Player对象
  4. 您的代码现在可以调用pauseVideo()您的播放器对象

onYouTubeIframeAPIReady()被解雇之前,您很可能想要禁用img上的任何事件.