Я бы посоветовал вам создать свои проигрыватели YouTube и хранить каждый из них в массиве. Таким образом, вы всегда можете l oop по каждому из них в обратном вызове и контролировать то, что должно происходить.
Сначала создайте пустой массив для хранения игроков и (необязательно) массив, содержащий объект с идентификатором видео и элементом для создания проигрывателя.
let youtubePlayers = [];
const youtubeVideosSources = [
{
id: 'M7lc1UVf-VE',
player: 'player1'
},
{
id: 'VFQB1zE9zYU',
player: 'player2'
}
];
В вашем готовом обратном вызове используйте метод map()
массива с идентификаторами и проигрывателями, чтобы создать новый массив проигрывателей YouTube и сохраните их в пустом массиве, который вы создали ранее. Или в этом случае перезапишите значение переменной.
function onYouTubeIframeAPIReady() {
youtubePlayers = youtubeVideosSources.map(({ id, player }) => new YT.Player(player, {
height: '360',
width: '640',
videoId: id,
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
}));
}
Затем в onPlayerStateChange
обратном вызове l oop над каждым игроком и остановите его, если он не является активированным в данный момент игроком и фактически играет . Вы можете проверить состояние каждого игрока с помощью метода 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();
}
}
}
}