如何重新加载光滑(滑块/轮播)jQuery插件?

Posted

技术标签:

【中文标题】如何重新加载光滑(滑块/轮播)jQuery插件?【英文标题】:How to Reload slick (slider/carousel) jQuery plugin? 【发布时间】:2015-11-29 00:22:03 【问题描述】:

我有 2 个按钮 具有相同的功能,即从 API 获取数据然后转换为 html,然后使用 jQuery 将其附加到 <div>。最后,使用slick jQuery 插件将 HTML 元素显示为滑块。

但是,在单击第一个按钮后,如果我单击第二个按钮(反之亦然),slick(滑块)不再起作用

Javascript 代码:

$(document).ready(function()

    /*
    Description  : Handle Day Button Event
    */
    $('.dayList').on("click", function(event)
    
            var dayChild = $(this).attr('id');

            //::refresh day lline
            $('.hour-to-hour-line').empty();    
            getHourList(dayChild,function()
            

                /* 
                The Slick
                */
                $('.hour-to-hour-line').slick(
                  dots: false,
                  infinite: false,
                  speed: 1000,
                  slidesToShow: 6,
                  slidesToScroll: 1,
                  focusOnSelect: true,
                  arrows: false,
                  slickSetOption: true
                ); 
          );   
    );
);

HTML代码:

<div id="monday" class="dayList" data-daycount = "1" tabindex="1"> Monday </div>
<div id="tuesday" class="dayList" data-daycount = "2" tabindex="2"> Tuesday </div>
<br/>
<div id="hour2" class="hour-to-hour-line"></div>

Javascript 代码,getHourList() 函数:

function getHourList(day,callback)

    //::convert day to dayCount
    var dayCount = 0;
    switch(day) 
        case "monday":
            dayCount = 1;
            break;
        case "tuesday":
            dayCount = 2;
            break;      
    

    //::fetch data from API
    jQuery.ajax(
        type: 'GET',
        url: 'http://localhost/api/1.0/schedule/items?day='+dayCount,
        dataType: 'json',
        beforeSend: function (xhr) 
            xhr.setRequestHeader ("Authorization", "Basic WS8fkn5344WN8==");
        ,
            success: function (data) 
            
                //::refresh <div class='hour-to-hour-list'> template
                $('.hour-to-hour-line').empty();                

                //data definition
                var iCounter_1          = 1;
                var iCounter_2          = 1;
                var iCounter_2_next   = 1;
                var timer = [];

                //::exctract time from array=>data
                jQuery.each( data.item, function( key, val ) 
                                                   
                    timer[iCounter_1] = val.time;       
                    iCounter_1++;           
                );

                //::exract time from array=>timer
                jQuery.each( data.item, function( key, val ) 
                                   
                    var time         = val.time;        
                    var parent_id = "hour_"+iCounter_2;
                    var hour_id    = "this_hour_"+iCounter_2;
                    var next         = iCounter_2 + 1;

                    $html = 
                    "<div id="+parent_id+" class='fl hour-focus'>"+
                        "<div id="+hour_id+" class='fl kurohige-prev jaman' data-time="+time+">"+time+"-"+timer[next]+"</div>"+
                        "<div class='fl line-0'></div>"+                    
                    "</div>";

                    $('.hour-to-hour-line').append($($html));       
                    iCounter_2++;       

                );
                if (callback)
                
                    callback();
                
            
    );

有人对此有解决方案吗?

【问题讨论】:

你应该尝试使用这样的东西:$('.hour-to-hour-line').slickRemove(0)$('.hour-to-hour-line').slickAdd(getHourList(dayChild)); 能不能得到getHourList函数的内容? 阅读文档。要销毁此插件,您必须在 kenwheeler.github.io/slick 中使用 $('.your-slider').slick('unslick'); 而不是 $('hour-to-hour-line').unslick()(搜索 Destroy嗨@MoshFeu 我试过了,萤火虫的结果是“TypeError: a[f].slick is undefined” A.当您开发时,我建议使用未缩小的版本,以便您更好地理解问题。 B. 我认为你应该检查为什么你不能摧毁它。我的猜测是这与你的问题有关。 【参考方案1】:

这是工作代码

已针对 1.8.1 版本进行了测试

$('#slick-slider').slick('refresh');

【讨论】:

在我的情况下,刷新不起作用并使用了resize 方法,它对我有用jQuery(".popup-slider").slick('resize'); 收到Uncaught TypeError: Cannot read property 'refresh' of undefined 你的 slick 版本是哪个? @TomSawyer 也许你可以试试 $('.slick-slider').eq(0).slick('refresh'); @MihirBhatt 它不起作用。正确的方法是 $('.photos').not('.slick-initialized').slick() ,它在 ajax 加载后重新处理所有未初始化的元素。【参考方案2】:

下面的代码对我有用

$('.my-slider')[0].slick.refresh()

【讨论】:

以上是关于如何重新加载光滑(滑块/轮播)jQuery插件?的主要内容,如果未能解决你的问题,请参考以下文章

光滑的轮播“初始化”功能不起作用

单击下一个/上一个图像时,将滑块移动到反应光滑的轮播中

如何使用 jQuery 自定义动画 <ul> 轮播滑块?

光滑的滑块在弹性容器中不起作用

光滑的轮播 JS 库在第一张幻灯片上堆叠所有内容

推荐一个 jQuery 响应式轮播/滑块 [关闭]