Карусель Слайдер с видео на YouTube

Можно ли использовать JQuery для создания слайдера видео на YouTube? Я хотел бы показать несколько загруженных мною.

Нашел несколько ответов, но сделал их с конкретными фреймворками, если возможно, я хотел бы придерживаться чего-то простого.

Я нашел этот код очень полезным, но не могу заставить его работать.

JSFiddle

$('.play-button').on('click', function () {
    $(this).hide();
    $(this).parent().fadeOut();
    $(this).parent().siblings('.slider-video')[0].play();
});

$('.slider-video').on('play', function () {
    $(this).attr('controls', '1');
});

// Additionnal code for the slider
var pos = 0,
    slides = $('.slide'),
    numOfSlides = slides.length;

function nextSlide(){
    stopCurrentVideo();
    slides.eq(pos).animate({left:'-100%'},500);
    pos = pos >= numOfSlides-1 ? 0 : ++pos;
    slides.eq(pos).css({left:'100%'}).animate({left:0},500);
}

function previousSlide(){
    stopCurrentVideo();
    slides.eq(pos).animate({left:'100%'},500);
    pos = pos == 0 ? numOfSlides-1 : --pos;
    slides.eq(pos).css({left:'-100%'}).animate({left:0},500);
}

function stopCurrentVideo(){
    $('.slider-video:eq('+pos+')').load().removeAttr('controls')
    .siblings('.overlay-content').show().find('.play-button').show();
}

$('.left').click(previousSlide);
$('.right').click(nextSlide);

Что вы имеете в виду, говоря, что не можете заставить это работать? Что ты пробовал?

Dipen Shah 04.12.2018 17:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
13
1
20 400
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ползунок вроде работает нормально. Просто измените код с тега видео на код для встраивания YouTube, и у вас будет карусель для плеера Youtube.

<div class = "video-slider">
<!-- SLIDE 1 -->
<div class = "slide">
    <div style = "position:relative;height:0;padding-bottom:56.28%"><iframe src = "https://www.youtube.com/embed/YE7VzlLtp-4?ecver=2" style = "position:absolute;width:100%;height:100%;left:0" width = "640" height = "360" frameborder = "0" allow = "autoplay; encrypted-media" allowfullscreen></iframe></div>
</div>
<!-- SLIDE 2 -->
<div class = "slide">
    <div style = "position:relative;height:0;padding-bottom:56.28%"><iframe src = "https://www.youtube.com/embed/EngW7tLk6R8?ecver=2" style = "position:absolute;width:100%;height:100%;left:0" width = "640" height = "360" frameborder = "0" allow = "autoplay; encrypted-media" allowfullscreen></iframe></div>
</div>
<!-- END OF SLIDES -->
<div class = "slide-arrow left"></div>
<div class = "slide-arrow right"></div>
</div>

Вы можете получить код для встраивания YouTube, щелкнув правой кнопкой мыши видео на youtube.com, выбрав «Копировать код для встраивания» и используя этот код в слайдере.

Надеюсь, поможет.

Сделал вилку авторской скрипки и внес изменения. JSFiddle

Это не работает. В HTML отсутствует закрывающий тег, и он несовместим с кодом, написанным автором. Он ошибается и не работает при нажатии.

RobertAKARobin 11.12.2018 02:14

@RobertAKARobin, можешь проверить созданную мной скрипку, похоже, она работает.

Satpal Tanan 11.12.2018 06:56

Скольжение работает, но видео не останавливается / не останавливается при скольжении.

RobertAKARobin 11.12.2018 19:02
Ответ принят как подходящий

Вы можете добиться этого с помощью YouTube iFrame API:

https://developers.google.com/youtube/iframe_api_reference

Этот API становится доступным, когда вы добавляете enablejsapi=1 к URL-адресам встраиваемых видео YouTube.

Чтобы получить доступ к элементам управления для остановки видео, для каждого видео вам необходимо получить доступ к экземпляру YT.Player. Для каждого iFrame я создал экземпляр YT.Player и прикрепил его непосредственно к объекту slide в качестве параметра с именем video.

(Обратите внимание, что многие разработчики говорят, что вы не должны прикреплять данные напрямую к объектам DOM, но я сделал это здесь, потому что это позволило мне более точно соответствовать вашему исходному коду.)

Доступ к YT.Player можно получить через специальную функцию, которая должна называться onYouTubeIframeAPIReady, и я мог бы заставить ее работать, только если бы она была за пределами из $(document).ready.

Я не могу разместить свое решение на JSFiddle, потому что iFrames плохо работают, поэтому вот моя реализация на GitHub:

http://robertakarobin.github.io/jquery-video-sliderhttps://github.com/robertakarobin/jquery-video-slider

Вот соответствующие биты:

HTML:

<div class = "video-slider">
    <!-- SLIDE 1 -->
    <div class = "slide">
        <iframe class = "video" src = "https://www.youtube.com/embed/YE7VzlLtp-4?ecver=2&enablejsapi=1"></iframe>
    </div>
    <!-- SLIDE 2 -->
    <div class = "slide">
        <iframe class = "video" src = "https://www.youtube.com/embed/YE7VzlLtp-4?ecver=2&enablejsapi=1"></iframe>
    </div>
    <!-- END OF SLIDES -->
    <div class = "slide-arrow left"></div>
    <div class = "slide-arrow right"></div>
</div>

JavaScript:

$(document).ready(function () {
    var pos = 0,
        slides = $('.slide'),
        numOfSlides = slides.length;

    function nextSlide() {
        // `[]` returns a vanilla DOM object from a jQuery object/collection
        slides[pos].video.stopVideo()
        slides.eq(pos).animate({ left: '-100%' }, 500);
        pos = (pos >= numOfSlides - 1 ? 0 : ++pos);
        slides.eq(pos).css({ left: '100%' }).animate({ left: 0 }, 500);
    }

    function previousSlide() {
        slides[pos].video.stopVideo()
        slides.eq(pos).animate({ left: '100%' }, 500);
        pos = (pos == 0 ? numOfSlides - 1 : --pos);
        slides.eq(pos).css({ left: '-100%' }).animate({ left: 0 }, 500);
    }

    $('.left').click(previousSlide);
    $('.right').click(nextSlide);
})

function onYouTubeIframeAPIReady() {
    $('.slide').each(function (index, slide) {
        // Get the `.video` element inside each `.slide`
        var iframe = $(slide).find('.video')[0]
        // Create a new YT.Player from the iFrame, and store it on the `.slide` DOM object
        slide.video = new YT.Player(iframe)
    })
}

Другие вопросы по теме