Задать вопрос
PolyakhAleksandr
@PolyakhAleksandr

Очередь видео youtube как это работает? (гугл поиск не помог решить проблему)Пример сделал на jsfiddle?

видео находятся в одной обертке. когда одно открываю, прокручиваю слайдер открываю второе, два видео проигрывают одновременно как так?

https://jsfiddle.net/71hp4nhf/
  • Вопрос задан
  • 372 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@void01
начнем с того,
1. твои iframe в твоем фиддле не имеют класса хотя в коде ты пытаешься пробежать по ним через each
2. ты не загрузил в фидл jQuery
3. ты грузишь YT API в onload фидла, а надо в body (настройки js)
====
далее... с чего ты взял что они в одной обертке? каждый плеер имеет свой объект, в твоем фидле так вообще плееры не имеют ссылок на js объекты т.к. подгружены напрямую с YT а не созданы скриптом...

вот набросал тебе фидл на pure js который грузит видео создавая инстансы плееров и ставит видео на паузу если начато воспроизведение другого видео
https://jsfiddle.net/6j4r1qrL/

P.S. вообще не совсем понимаю зачем ты изобретаешь велосипед генеря свою очередь таким странным способом, когда можно использовать YT API
https://developers.google.com/youtube/iframe_api_r...

UPD: по комментам:
тебе надо сгенерить на странице дивы:
<div id="уникальный айди дива" class="iframe-video" width="ширина плеера" height="высота плеера" data-src="код видео (например Glm-VSKszhA)"></div>

после блока с дивами добавь скрипт из фидла
var player;
var players = [];
function onYouTubeIframeAPIReady() {
[].forEach.call(document.getElementsByClassName('iframe-video'), function (el) {
	player = new YT.Player(el.id, {
        height: el.getAttribute('height'),
        width: el.getAttribute('width'),
        videoId: el.getAttribute('data-src'),
        events: {
            'onStateChange': onPlayerSC
        }
    });
    players.push(player);
});
}
function onPlayerSC(e){
if (e.data == 1)
  players.forEach(function(i){
		if (i!=this){
    	i.pauseVideo();
    }
  },e.target)
}

var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);


P.S. если в data-src дива тебе проще грузить полный URL видео, можно его подрезать регулярным выражением, тогда надо строку
videoId: el.getAttribute('data-src'),
поменять на
videoId: el.getAttribute('data-src').replace(/^.*[\/=]([^\/=]*)/,"$1"),

он сожрет URL как в формате https://www.youtube.com/watch?v=ZpvG6vTLIyM
так и в https://youtu.be/ZpvG6vTLIyM или https://www.youtube.com/embed/ZpvG6vTLIyM
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы