video - YouTube嵌入-播放视频2时暂停视频1

标签 video youtube youtube-api embed

我正在尝试通过Youtube API找到一种方法,以便在播放另一个视频时暂停一个视频,我在同一页面上有多个YouTube嵌入。
有没有一个我完全错过的简单代码?

      <div id="video_youtube" style="min-height:600px; margin-top:1%;">
        <iframe id='player1' style="margin-right:2%; padding-bottom:1%;" width="500px" height="281px" src="http://www.youtube.com/embed/rZye11nxOOQ" frameborder="0" allowfullscreen>
          </iframe>
        <iframe id='player2' style="padding-bottom:1%;" width="500px" height="281px" src="http://www.youtube.com/embed/8Q89hEnkYH4" frameborder="0" allowfullscreen>
          </iframe>
     </div>               

我发现其中一个显示的代码可以让您对两个视频执行相同的操作,
但我认为,如果我必须添加更多视频,则此代码太过手工,会变得更长且复杂。
 <div id="player1"></div>
 <div id="player2"></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 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();
    }
}
</script>

最佳答案

如果您创建了一个包含所有玩家对象的对象,并确保引用每个玩家的属性的名称与该玩家的ID相匹配该怎么办?然后,您的stop方法可以为... in ...循环(循环遍历属性名而不是值)做一个简单的javascript:

 <div id="player1"></div>
 <div id="player2"></div>
 <!-- add as many as you need -->
 <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() {
    player.player1 = new YT.Player('player1', {
        height: '293',
        width: '520',
        videoId: 'zXV8GMSc5Vg',
        events: {
            'onStateChange': onPlayerStateChange
        }
    });
    player.player2 = new YT.Player('player2', {
        height: '293',
        width: '520',
        videoId: 'LTy0TzA_4DQ',
        events: {
            'onStateChange': onPlayerStateChange
        }
    });
    // add more here, ensuring that in player.[whatever] the 'whatever' is the same as the ID. You could very easily script this process as well so you don't repeat yourself.
}

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

function stopVideos(player_id) {
    for (p in player) {
        if (p!==player_id) {
          player[p].stopVideo(); // all videos will stop playing except the one that triggered the event
        }
    }
}
</script>

关于video - YouTube嵌入-播放视频2时暂停视频1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24187792/

相关文章:

video - 为视频提供圆形透明边缘,以便可以使用 FFMPEG 将其覆盖在另一个视频上

javascript - Media Source Api 不适用于自定义 webm 文件(Chrome 版本 23.0.1271.97 m)

javascript - YouTube在加载时强制全屏显示

youtube - 获取日期范围内特定视频的分析数据

python - 如何定位视频子集的时间戳

video - 无法使用媒体源扩展在 chromium 上播放 webM 文件。适用于 Firefox 和 vlc

Javascript 随机 YouTube 视频自动播放

javascript - 如何在文本框中的客户端验证 youtube url

php - 如何从显示的YouTube视频的链接中获取jQuery变量到PHP以发送到数据库?

iphone - YouTube api v3 对 iOS 视频的评论