带YouTube视频的轮播滑块

时间:2018-11-27 19:04:16

标签: javascript jquery youtube slider carousel

是否可以使用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);

2 个答案:

答案 0 :(得分:1)

滑块似乎工作正常。只需将代码从“视频”标签更改为“ 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.com上的视频来获取YouTube嵌入代码,然后选择“复制嵌入代码”,然后在滑块中使用该代码。

希望有帮助。

我拨弄了作者的小提琴并进行了更改。 JSFiddle

答案 1 :(得分:1)

您可以使用YouTube iFrame API来实现:

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

当您将enablejsapi=1附加到YouTube视频嵌入的URL时,此API可用。

为了访问停止视频的控件,您需要为每个视频访问YT.Player的实例。对于每个iFrame,我创建了一个YT.Player的实例,并将其作为名为slide的参数直接附加到video对象。

(请注意,许多开发人员说您不应该将数据直接附加到DOM对象,但是我在这里这样做是因为它使我可以更紧密地匹配您的原始代码。)

YT.Player可以通过必须称为onYouTubeIframeAPIReady的特殊功能进行访问,只有在$(document).ready外部中,我才能使用该功能。

我无法将解决方案放在JSFiddle上,因为iFrame不能很好地发挥作用,所以这是我在GitHub上的实现:

http://robertakarobin.github.io/jquery-video-slider https://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)
    })
}