2013-02-18 44 views
6

我有多個嵌入在頁面上的YouTube iFrames。如果其中一部電影已經在播放,並且用戶決定開始播放另一部電影,是否可以停止播放第一部電影,以便每次只播放一部電影?暫停YouTube iframe嵌入時播放另一個

我已經看過'iframe嵌入'的YouTube播放器API參考'https://developers.google.com/youtube/iframe_api_reference,但如果我是誠實的,我只是不明白它。我的開發人員技能非常有限....清楚。

可憐的我知道,但是這是我目前所面對的(只是I幀)... http://jsfiddle.net/YGMUJ/

<iframe width="520" height="293" src="http://www.youtube.com/v/zXV8GMSc5Vg?version=3&enablejsapi=1" frameborder="0" allowfullscreen></iframe> 
<iframe width="520" height="293" src="http://www.youtube.com/v/LTy0TzA_4DQ?version=3&enablejsapi=1" frameborder="0" allowfullscreen></iframe> 

我以爲所有我需要做的是增加 '& enablejsapi = 1' 在視頻網址結束。

任何幫助將不勝感激。
預先感謝您。

回答

7

您實際上不想使用iframe,而是使用iFrame Player API。根據您實際想要嵌入的視頻數量,您可能希望使此javascript更具動態性,但這個工作示例應該足以讓您開始使用。

基本上我在這裏做的是初始化兩個玩家,並在玩家狀態變化時暫停相反的視頻玩。

您可以在http://jsfiddle.net/mattkoskela/Whxjx/

<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 player; 
function onYouTubeIframeAPIReady() { 
    player1 = new YT.Player('player1', { 
     height: '293', 
     width: '520', 
     videoId: 'zXV8GMSc5Vg', 
     events: { 
      'onStateChange': onPlayerStateChange 
     } 
    }); 
    player2 = new YT.Player('player2', { 
     height: '293', 
     width: '520', 
     videoId: 'LTy0TzA_4DQ', 
     events: { 
      'onStateChange': onPlayerStateChange 
     } 
    }); 
} 

function onPlayerStateChange(event) { 
    if (event.data == YT.PlayerState.PLAYING) { 
     stopVideo(event.target.a.id); 
    } 
} 

function stopVideo(player_id) { 
    if (player_id == "player1") { 
     player2.stopVideo(); 
    } else if (player_id == "player2") { 
     player1.stopVideo(); 
    } 
} 

+0

馬特,非常感謝。那很棒。目前這只是我需要使用的兩個視頻,但我確定如果需要添加更多內容,我可以將其解決。 謝謝:) – Frasier013 2013-02-19 12:50:33

+0

嗨馬特,對不起,麻煩你,但我剛剛在IE8中測試我的網站,它只顯示一個 視頻http://www.lornanaylorhomeopath.co.uk/testarea/site/benefits_of_homeopathy/index.htm 它彙報以下錯誤: 頁面錯誤細節 消息:對象不支持此屬性或方法 行:52 字符:2 代碼:0 URI:http://www.lornanaylorhomeopath.co .UK/testarea /資產/通用。js 如果這是一個大問題,我真的不會因爲我可以恢復使用常規的嵌入式iFrames而變得非常困難。 但只是想我會問:) – Frasier013 2013-03-01 16:39:12

12

用下面的代碼在這裏打球是@Matt Koskela的版本的高級版本。它不要求您通過JavaScript創建視頻。例如,如果視頻是在PHP端生成的(比如Wordpress)。

JsFiddle demo here

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

    function onYouTubeIframeAPIReady() { 
     var $ = jQuery; 
     var players = []; 
     $('iframe').filter(function(){return this.src.indexOf('http://www.youtube.com/') == 0}).each(function (k, v) { 
      if (!this.id) { this.id='embeddedvideoiframe' + k } 
      players.push(new YT.Player(this.id, { 
       events: { 
        'onStateChange': function(event) { 
         if (event.data == YT.PlayerState.PLAYING) { 
          $.each(players, function(k, v) { 
           if (this.getIframe().id != event.target.getIframe().id) { 
            this.pauseVideo(); 
           } 
          }); 
         } 
        } 
       } 
      })) 
     }); 
    } 
</script> 

One: 
<iframe frameborder="0" allowfullscreen="1" title="YouTube video player" width="160" height="100" src="http://www.youtube.com/embed/zXV8GMSc5Vg?enablejsapi=1&amp;origin=http%3A%2F%2Ffiddle.jshell.net"></iframe> 
<br/> 
Two: 
<iframe frameborder="0" allowfullscreen="1" title="YouTube video player" width="160" height="100" src="http://www.youtube.com/embed/LTy0TzA_4DQ?enablejsapi=1&amp;origin=http%3A%2F%2Ffiddle.jshell.net"></iframe> 

編輯:退房Jennie Sadler's fine-tuned version below如果您的視頻開始爲縮略圖。

+0

這應該真的是被接受的答案。這是一個更強大的解決方案。謝謝! – 2015-07-17 18:26:51

+0

夢幻般的解決方案 - 完美的作品 - 謝謝! – arroni 2016-12-20 16:00:35

2

vbence的解決方案是非常接近,但有一個編輯,我會建議。您應該檢查其他玩家是否在暫停之前正在玩遊戲,否則,播放頁面上的第一個嵌入將會播放/暫停其他任何嵌入頁面的內容,刪除預覽縮略圖並創建令人吃驚的副作用。

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

function onYouTubeIframeAPIReady() { 
    var $ = jQuery; 
    var players = []; 
    $('iframe').filter(function(){return this.src.indexOf('http://www.youtube.com/') == 0}).each(function (k, v) { 
     if (!this.id) { this.id='embeddedvideoiframe' + k } 
     players.push(new YT.Player(this.id, { 
      events: { 
       'onStateChange': function(event) { 
        if (event.data == YT.PlayerState.PLAYING) { 
         $.each(players, function(k, v) { 
          if (this.getPlayerState() == YT.PlayerState.PLAYING # checks for only players that are playing 
            && this.getIframe().id != event.target.getIframe().id) { 
           this.pauseVideo(); 
          } 
         }); 
        } 
       } 
      } 
     })) 
    }); 
} 
</script> 

One: 
<iframe frameborder="0" allowfullscreen="1" title="YouTube video player" width="160" height="100" src="http://www.youtube.com/embed/zXV8GMSc5Vg?enablejsapi=1&amp;origin=http%3A%2F%2Ffiddle.jshell.net"></iframe> 
<br/> 
Two: 
<iframe frameborder="0" allowfullscreen="1" title="YouTube video player" width="160" height="100" src="http://www.youtube.com/embed/LTy0TzA_4DQ?enablejsapi=1&amp;origin=http%3A%2F%2Ffiddle.jshell.net"></iframe> 
相關問題