如何防止所有的视频重新加载时,任何事件发生在光滑的旋转木马



我正在使用Slick carousel插件来创建视频的carousel,用户可以添加,删除和过滤。我遇到的问题是,每当用户执行事件(添加/删除/过滤)时,旋转盘上的所有视频都会重新加载,这给人一种笨拙的感觉。

我发现,如果我进入slick.js并注释掉' _ ',重新加载可以停止。$slidesCache = _.$slides; ' ',但是这会破坏filter函数是否有一种方法可以防止重新加载,同时仍然保留所有功能?

JSFiddle: http://jsfiddle.net/neowot/eoov2ud1/37/

Javascript

$(document).ready(function(){
    var slideId = 0;
    var slides = [];
    $('.add-remove').slick({
        slidesToShow: 3,
        slidesToScroll: 3
    });
    var target = '<div class="videowrapper"><iframe src="https://www.youtube.com/embed/7WgYmnwO-Pw" frameborder="0" allowfullscreen></iframe></div>';
    $('.js-add-FirstClass-slide').on('click', function() {        
        $('.add-remove').slick('slickAdd','<div class="FirstClass"  slide-id="' + slideId + '"><h3><a class="sliderX">X</a>' + target + '</h3></div>');
        slides.push(slideId);
        slideId++;
    });
    $('.js-add-SecondClass-slide').on('click', function() {
        $('.add-remove').slick('slickAdd','<div class="SecondClass" slide-id="' + slideId + '"><h3><a class="sliderX">X</a>' + target + '</h3></div>');
        slides.push(slideId);
        slideId++;
    });
    var filtered = false;
    $('.ToggleFirstClass').on('click', function() {
        if (filtered === false) {
            $('.add-remove').slick('slickFilter', $('.FirstClass')); 
            filtered = true;
        } else {
            $('.add-remove').slick('slickUnfilter');
            filtered = false;
        }
    });
    $('.ToggleSecondClass').on('click', function() {
        if (filtered === false) {
            $('.add-remove').slick('slickFilter','.SecondClass'); 
            filtered = true;
        } else {
            $('.add-remove').slick('slickUnfilter');
            filtered = false;
        }
    });
    $('body').on('click', '.sliderX', function() {
        var id = parseInt($(this).closest("div").attr("slide-id"), 0);
        var index = slides.indexOf(id);
        $('.add-remove').slick('slickRemove', index);
        slides.splice(index, 1);
    });
});

slick.JS片段
Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {
    var _ = this;
    if (typeof(index) === 'boolean') {
        addBefore = index;
        index = null;
    } else if (index < 0 || (index >= _.slideCount)) {
        return false;
    }
    _.unload();
    if (typeof(index) === 'number') {
        if (index === 0 && _.$slides.length === 0) {
            $(markup).appendTo(_.$slideTrack);
        } else if (addBefore) {
            $(markup).insertBefore(_.$slides.eq(index));
        } else {
            $(markup).insertAfter(_.$slides.eq(index));
        }
        } else {
        if (addBefore === true) {
            $(markup).prependTo(_.$slideTrack);
        } else {
            $(markup).appendTo(_.$slideTrack);
        }
    }
    _.$slides = _.$slideTrack.children(this.options.slide);
    _.$slideTrack.children(this.options.slide).detach();
    _.$slideTrack.append(_.$slides);
    _.$slides.each(function(index, element) {
        $(element).attr('data-slick-index', index);
    });
    _.$slidesCache = _.$slides;
    _.reinit();
};

更多的是一个解决方法,而不是答案:而不是加载iframe,您可以在<img>标记中显示youtube缩略图。

当用户点击它时,加载相关的iframe并自动播放视频。

对我来说,笨拙的感觉已经消失了:http://jsfiddle.net/eoov2ud1/40/(但它需要一些样式来显示它是一个可播放的视频,一些CSS)

编辑实际上,您可以在carousel DOM之外创建iframe,以便它独立于它:http://jsfiddle.net/eoov2ud1/48/

因此它可以继续播放,即使视频被过滤/隐藏/删除(与一些额外的JS,你也可以停止视频,当你检测到它被删除)

相关内容

最新更新