我有一个包含多个视频的 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/