7

Youtube API と埋め込み動画についてサポートが必要です。新しいYouTubeビデオがクリックされたときに、現在のページで実行されているすべてのiframeビデオ(ここでは3つしか撮影していませんが、いくつかのビデオがあります)を停止したいと考えています。ある時点で、1 つの iframe YouTube ビデオのみを実行する必要があります。ドキュメント [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>

更新しました

  1. onStateChange イベントがトリガーされていない (機能している)
  2. この例では 3 つのビデオがあります。実際には、各ビデオに onPlayerStateChange を書き込む代わりに、より多くのビデオがあります。 ) および this.playvideo().. この種の何か..(ヘルプが必要) このフィドルを参照してくださいhttp://jsfiddle.net/LakshmiV/kn5Sf/ 助けてください。
4

3 に答える 3

10

あなたはこのようなことをすることができます...

YouTube プレーヤーの iframe として識別できるように、すべての 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>

コードを更新しました...これはあなたの助けになるはずです。

ここでそれを参照してください... http://jsfiddle.net/anubhavranjan/Y8P7y/

于 2013-02-15T07:55:58.313 に答える
6

https://stackoverflow.com/a/13260520/835822の同様の質問に対するCobyによる優れた回答

属性セレクターを使用すると、Youtube からの任意の iframe をターゲットにすることができ、jQuery のそれぞれを使用して、それらすべてをループできます。

$(function(){
  $('iframe[src*="http://www.youtube.com/embed/"]').each(function(i) {
  this.contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}', '*');
});

});

于 2015-02-11T00:22:15.350 に答える
3

良いコンセプトですが、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();

    }
}

}

http://jsfiddle.net/Y8P7y/82/

于 2014-09-16T12:35:11.487 に答える