我需要Youtube API的一些帮助并嵌入视频。我想在点击新的YouTube视频时停止当前页面上运行的所有iframe视频(此处我只拍摄了3个,但有几个视频)。在某个时间点,只应运行一个iframe YouTube视频。我已经去了thruogh文档[https://developers.google.com/youtube/js_api_reference] [1]并且能够写到这里......
更新:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="http://www.youtube.com/player_api"></script>
<script type="text/javascript">
var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}
var done = false;
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.PLAYING && !done) {
alert("hi5");
player1.stopVideo();
player2.stopVideo();
done = true;
}
}
</script>
</head>
<body>
<div>TODO write content</div>
<ul class="image-grid" id="list">
<li>
<iframe id="player" width="385" height="230" src="http://www.youtube.com/embed/erDxb4IkgjM?rel=0&wmode=Opaque&enablejsapi=1;showinfo=0;controls=0" frameborder="0" allowfullscreen></iframe>
</li>
<li>
<iframe id="player1" width="385" height="230" src="http://www.youtube.com/embed/wSrA5iQGlDc?rel=0&wmode=Opaque&enablejsapi=1;showinfo=0;controls=0" frameborder="0" allowfullscreen></iframe>
</li>
<li>
<iframe id="player2" width="385" height="230" src="http://www.youtube.com/embed/c7b_WLkztXc?rel=0&wmode=Opaque&enablejsapi=1;showinfo=0;controls=0" frameborder="0" allowfullscreen></iframe>
</li>
</ul>
</body>
</html>
已更新
答案 0 :(得分:9)
你可以这样做......
为每个iframe提供一个类,以便将它标识为youtube播放器的iframe。 在这里,我给了“yt_players”
现在您可以使用以下代码......
<script type="text/javascript">
players = new Array();
function onYouTubeIframeAPIReady() {
var temp = $("iframe.yt_players");
for (var i = 0; i < temp.length; i++) {
var t = new YT.Player($(temp[i]).attr('id'), {
events: {
'onStateChange': onPlayerStateChange
}
});
players.push(t);
}
}
onYouTubeIframeAPIReady();
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.PLAYING) {
var temp = event.target.a.src;
var tempPlayers = $("iframe.yt_players");
for (var i = 0; i < players.length; i++) {
if (players[i].a.src != temp)
players[i].stopVideo();
}
}
}
</script>
更新了代码......这应该对您有所帮助。
答案 1 :(得分:3)
Coby对https://stackoverflow.com/a/13260520/835822
的类似问题给出了很好的答案使用an attribute selector,您可以定位来自Youtube的任何iframe,然后使用jQuery's each,您可以遍历所有iframe。
$(function(){
$('iframe[src*="http://www.youtube.com/embed/"]').each(function(i) {
this.contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}', '*');
});
});
答案 2 :(得分:1)
好概念,但event.target.a.src不起作用!将其更改为event.target.getVideoUrl(),它工作正常。看看这里
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.PLAYING) {
var temp = event.target.getVideoUrl();
var tempPlayers = $("iframe.yt_players");
for (var i = 0; i < players.length; i++) {
if (players[i].getVideoUrl() != temp) players[i].stopVideo();
}
}
}