javascript - youtube iframe api在另一个正在播放时停止视频

标签 javascript jquery video youtube youtube-iframe-api

我有一个包含多个视频的 slider 。我希望能够在播放另一个视频时停止视频(如果它正在播放)。

我不是 js 专家,所以我在使它工作时遇到了一些麻烦。

我创造了这支笔:https://codepen.io/vlrprbttst/pen/eYpMrmB?editors=1010作为一个起点,但我不知道如何继续。我想这部分与我正在寻找的东西有关:

events: {
            'onReady': onPlayerReady,
            'onStateChange': onPlayerStateChange
          }

但我不确定如何使用它:/

我曾经使用一种并不总是有效的方法,它依赖于一个复杂的系统,该系统具有一个不可见的 iframe 覆盖,可以触发使用 jquery 播放/暂停视频,但它并不总是有效(你可以看到它)这里:https://codepen.io/vlrprbttst/pen/vxrWzQ)。我一直在网上寻找,但我只能找到同时播放多个视频。

如果在同一页面上播放不同的视频,有关如何检测视频播放和停止它的任何建议?有或没有 jquery 都可以。

非常感谢你

最佳答案

我建议您创建您的 YouTube 播放器并将每个 om 存储在一个数组中。这样,您始终可以在回调中遍历它们中的每一个并控制应该发生的事情。

首先创建一个空数组来存储播放器和(可选)一个数组,该数组保存具有视频 id 的对象和要在其中创建播放器的元素。

let youtubePlayers = [];
const youtubeVideosSources = [
  {
    id: 'M7lc1UVf-VE',
    player: 'player1'
  },
  {
    id: 'VFQB1zE9zYU',
    player: 'player2'
  }
];

在您准备好的回调中使用 map()带有 id 和播放器的数组的方法来创建一个新的 YouTube 播放器数组并将它们存储在您之前创建的空数组中。或者在这种情况下,覆盖变量的值。
function onYouTubeIframeAPIReady() {
  youtubePlayers = youtubeVideosSources.map(({ id, player }) => new YT.Player(player, { 
    height: '360',
    width: '640',
    videoId: id,
    events: {
      'onReady': onPlayerReady,
      'onStateChange': onPlayerStateChange
    }
  }));
}

然后在onPlayerStateChange回调循环遍历每个播放器,如果它们不是当前激活的播放器并且实际上正在播放,则停止它们。您可以使用 getPlayerState() 查看每个玩家的状态方法。
function onPlayerStateChange(event) {
  const playing = YT.PlayerState.PLAYING;
  if (event.data === playing) {
    for (const player of youtubePlayers) {
      if (player !== event.target && player.getPlayerState() === playing) {
        player.stopVideo();
      }
    }
  }
}

关于javascript - youtube iframe api在另一个正在播放时停止视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61683130/

相关文章:

javascript - HTML Tic-Tac-Toe 游戏获奖者公告

javascript - JQUERY 在 if 语句中链接变量,逻辑运算符

javascript - 添加 onclick 函数到动态创建的 html $ ('#data' ).append()

javascript - 竞争条件 : Trying to play a video before it loads React

android - 如何调用系统默认播放器播放视频?

javascript - 仅显示具有子用户标识的项目

javascript - 外部函数到类方法的内联绑定(bind)

php - json_encode 添加特殊字符

javascript - 将 "</script>"放入 JavaScript 中的变量中

html - 如何禁用 HTML5 视频标签搜索?