#javascript #jquery #html #youtube-api
#javascript #jquery #HTML #youtube-api
Вопрос:
Как я могу вставлять разные видеоролики YouTube в разные места на странице с помощью API YouTube? (Это означает, что они не могут использовать один и тот же <div>
«плеер».) Они также запускаются в разное время на основе разных onclick
событий. Мой код отлично работает, когда на странице есть только одно видео, но я ни за что на свете не могу придумать код, позволяющий всему этому работать с 2 или более!
Сначала я пытался просто добавить несколько экземпляров кода, где я хотел, чтобы каждый из них был, но это не сработало. Я читал, что всех игроков нужно добавить в один <script>
, поэтому я попробовал это:
(Кроме того, имеет ли значение, ГДЕ на странице <script>
находится и где <div>
находятся s? Может <script>
ли запись в a <div>
независимо от того, где они находятся на странице?)
В любом случае, вот код, который я использую:
// inside other containers with with relative and absolute positioning
// that fadeIn and fadeOut using jQuery
<div id="video1"></div>
// inside other containers with with relative and absolute positioning
// that fadeIn and fadeOut using jQuery
<div id="video2"></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 player1;
var player2;
function onYouTubeIframeAPIReady() {
player1 = new YT.Player('video1',{
width: '320',
height: '216',
videoId: 'VIDEO_ID_1',
playerVars: {rel: 0, controls: 0, autohide: 1, disablekb: 1, enablejsapi: 1, modestbranding: 1, showinfo: 0 },
events: { 'onStateChange': onPlayerStateChange1 } });;
player2 = new YT.Player('video2',{
width: '320',
height: '216',
videoId: 'VIDEO_ID_2',
playerVars: {rel: 0, controls: 0, autohide: 1, disablekb: 1, enablejsapi: 1, modestbranding: 1, showinfo: 0 },
events: { 'onStateChange': onPlayerStateChange2 } });; }
function startVideo1() {
player1.playVideo();
$('#video_box_B1').delay(1000).fadeIn();
$("#video_box_B1").delay(20000).hide();
};
function onPlayerStateChange1(event) {
if(event.data === 2) {
$("#video_box_B1").hide();
}
}
function startVideo2() {
player2.playVideo();
$('#video_box_E5').delay(1000).fadeIn();
$("#video_box_E5").delay(20000).hide();
};
function onPlayerStateChange2(event) {
if(event.data === 2) {
$("#video_box_E5").hide();
}
}
</script>
// onclick triggers at various places on the page
<img src="image_1.jpg" onclick="startVideo1()" />
<img src="image_2.jpg" onclick="startVideo2()" />
Есть ли кто-нибудь, кто может сказать, что я делаю не так? Кстати, эти контейнеры, которые исчезают и исчезают, отлично работают, если я использую неподвижное изображение, только текст или только с одним видео на странице, так что причиной этого являются не эти исчезающие контейнеры. Это должен быть скрипт YouTube. Кто-нибудь может помочь?
Комментарии:
1. Как и когда вызываются функции startVideo1() и startVideo2() ?
2. Я добавил их в текущий код для вашей справки. Я использую
<img src="image_1.jpg" onclick="startVideo1()" />
и<img src="image_2.jpg" onclick="startVideo2()" />
в разных местах страницы. Это отлично работает, когда есть только одно встраивание API YouTube, поэтому я знаю, что этот метод запуска не является проблемой. Проблема в том, как я пытаюсь разместить на странице более одного видео.3. Читая ваш другой комментарий, кажется, что он уже работает так, как вы этого хотите.
4. Да, теперь это работает отлично. Спасибо.
Ответ №1:
Кажется, работает в этом jsbin:
http://jsbin.com/catuhimo/3/edit
В каком браузере вы это пробуете? Если вы используете Safari новейшей версии 8.0 (10538.39.41) в Yosemite, у jsfiddle и JSBin возникли некоторые проблемы с рендерингом. Я опробовал ваш код в последней версии Chrome и заменил заполнители фактическими идентификаторами видео, и это сработало.
Это помогает? Я упускаю суть вашего вопроса? Исходя из того, что вы спросили, для меня это работает нормально.
Комментарии:
1. Я использую Chrome в Mavericks. Я понятия не имею, что я делал раньше, по-видимому, потому что ДА, это работает в jsbin. Возможно, у меня была небольшая опечатка в моем коде, которую я случайно исправил здесь. Мне придется дважды проверить свой код на моей странице или, может быть, просто написать его с нуля. Я не могу поверить, что все это время отвечал на свой вопрос! 🙁 Спасибо, что показали мне то, что я, по-видимому, уже знал!
2. Не корите себя за это! Рад, что теперь это работает 🙂 Кроме того, есть способы реорганизовать ваш код, чтобы вам не приходилось вручную создавать каждый экземпляр видеопроигрывателя; будет ли это полезно в вашем приложении / странице? Я могу опубликовать некоторый код позже, если он имеет отношение к тому, над чем вы работаете
3. У меня есть «система» для редактирования кода, хотя мне приходится копировать каждый раз, когда я создаю страницу с более чем одним встраиванием YouTube. Я не уверен, насколько мне это нужно, но, возможно, ваш код будет полезен, если другие найдут эту страницу в поиске Google для проблемы, которую они пытаются решить. 🙂