[英]Reinitialize Slick js after successful ajax call
我正在使用 Slick 实现轮播,当页面加载时一切正常。我想要实现的是,当我调用 Ajax 来检索新数据时,我仍然想要 slick 轮播实现,但现在我失去了它。
我已将 slick 的电话拨入 function
function slickCarousel() {
$('.skills_section').slick({
infinite: true,
slidesToShow: 3,
slidesToScroll: 1
});
}
然后我在成功回调中调用 function
$.ajax({
type: 'get',
url: '/public/index',
dataType: 'script',
data: data_send,
success: function() {
slickCarousel();
}
});
但是没有调用 function。 我怎样才能重新初始化这个js?
你应该使用unslick方法:
function getSliderSettings(){
return {
infinite: true,
slidesToShow: 3,
slidesToScroll: 1
}
}
$.ajax({
type: 'get',
url: '/public/index',
dataType: 'script',
data: data_send,
success: function() {
$('.skills_section').slick('unslick'); /* ONLY remove the classes and handlers added on initialize */
$('.my-slide').remove(); /* Remove current slides elements, in case that you want to show new slides. */
$('.skills_section').slick(getSliderSettings()); /* Initialize the slick again */
}
});
这应该工作。
$.ajax({
type: 'get',
url: '/public/index',
dataType: 'script',
data: data_send,
success: function() {
$('.skills_section').slick('reinit');
}
});
最好的方法是在重新初始化之后销毁光滑的滑块。
function slickCarousel() {
$('.skills_section').slick({
infinite: true,
slidesToShow: 3,
slidesToScroll: 1
});
}
function destroyCarousel() {
if ($('.skills_section').hasClass('slick-initialized')) {
$('.skills_section').slick('destroy');
}
}
$.ajax({
type: 'get',
url: '/public/index',
dataType: 'script',
data: data_send,
success: function() {
destroyCarousel()
slickCarousel();
}
});
有一个unslick
方法可以取消初始化轮播,因此您可以在重新初始化之前尝试使用它。
$.ajax({
type: 'get',
url: '/public/index',
dataType: 'script',
data: data_send,
success: function() {
$('.skills_section').unslick(); // destroy the previous instance
slickCarousel();
}
});
希望这可以帮助。
在ajax调用开始之前我不得不取消旋转木马,但是在你已经有一个光滑的旋转木马之前你不能这样做。 因此,我将变量设置为0,并且仅在更改后运行unslick
var slide = 0
if(slide>0)
$('#ui-id-1').slick('unslick');
$.ajax({
//do stuff, here
},
success: function( data ) {
$('#ui-id-1').slick();
slide++;
}
最好的方法是使用unslick
设置或功能(取决于你的版本的光滑),如其他答案中所述,但这对我不起作用。 我从浮油中得到一些似乎与此有关的错误。
但是,现在工作的是在重新初始化光滑之前从容器中删除slick-initialized
和slick-slider
类,如下所示:
function slickCarousel() {
$('.skills_section').removeClass("slick-initialized slick-slider");
$('.skills_section').slick({
infinite: true,
slidesToShow: 3,
slidesToScroll: 1
});
}
删除类似乎不会启动destroy事件(未经测试但有意义),但确实导致后来的slick()
调用正常运行,因此只要你没有任何触发器就可以销毁,你应该是好的。
我遇到了一个问题,Slick旋转木马在新数据上并没有令人耳目一新,它正在向以前的幻灯片添加新的幻灯片,我找到了一个解决了我的问题的答案,这很简单。
尝试取消单击,然后分配正在光滑轮播中呈现的新数据,然后再次初始化光滑。 这些是我的步骤:
jQuery('.class-or-#id').slick('unslick');
myData = my-new-data;
jQuery('.class-or-#id').slick({slick options});
注意:请查看光滑的网站以获取语法以防万一。 这也意味着你在光滑甚至初始化之前都没有使用unslick,这意味着只需初始化(比如这个jquery('.my-class').slick({options}
);第一个ajax调用,一旦初始化然后按照上面的步骤,你可能想要使用if else
伙计们,我们走吧! 它帮助了我
$('.slick-slider').not('.slick-initialized').slick({
infinite: false,
slidesToShow: 1,
slidesToScroll: 1,
dots: true,
arrows: false,
touchThreshold: 9
});
调用请求后,设置超时以初始化滑块滑块。
var options = {
arrows: false,
slidesToShow: 1,
variableWidth: true,
centerPadding: '10px'
}
$.ajax({
type: "GET",
url: review_url+"?page="+page,
success: function(result){
setTimeout(function () {
$(".reviews-page-carousel").slick(options)
}, 500);
}
})
不要在开始时初始化光滑滑块。 只需在AJAX超时后初始化。 这对你有用。
$('#slick-slider').slick('refresh'); //Working for slick 1.8.1
试试这个代码,它对我帮助!
$('.slider-selector').not('.slick-initialized').slick({
dots: true,
arrows: false,
setPosition: true
});
光滑版本:1.8.0
function getSliderSettings() {
return {
slidesToShow: 3,
slidesToScroll: 1,
loop: true,
arrows: true,
dots: false,
}
}
$.ajax({
type: 'get',
url: '/public/index',
dataType: 'html',
data: some_data,
success: function(response) {
$('[data-role="slick-slider"]').slick('unslick');
$('[data-role="slick-slider"]').html($(response).html());
$('[data-role="slick-slider"]').slick(getSliderSettings());
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.