カルーセルの実装にSlickを使用しており、ページが読み込まれたときにすべてが正常に機能します。
スリックの呼び出しを関数に入れました
function slickCarousel() {
$('.skills_section').slick({
infinite: true,
slidesToShow: 3,
slidesToScroll: 1
});
}
そして、成功コールバック内で関数を呼び出します
$.ajax({
type: 'get',
url: '/public/index',
dataType: 'script',
data: data_send,
success: function() {
slickCarousel();
}
});
しかし、関数は呼び出されていません。この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 */
}
});
最適な方法は、スリックスライダーを再初期化した後に破棄することです。
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();
}
});
これは動作するはずです。
$.ajax({
type: 'get',
url: '/public/index',
dataType: 'script',
data: data_send,
success: function() {
$('.skills_section').slick('reinit');
}
});
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
メソッドがあります。そのため、再初期化する前にそれを使用してみてください。
$.ajax({
type: 'get',
url: '/public/index',
dataType: 'script',
data: data_send,
success: function() {
$('.skills_section').unslick(); // destroy the previous instance
slickCarousel();
}
});
お役に立てれば。
最良の方法は、他の回答に記載されているunslick
設定または関数(slickのバージョンに応じて)を使用することですが、それは私にとってはうまくいきませんでした。 this に関連しているように見えるスリックからいくつかのエラーが出ています。
ただし、今のところ機能しているのは、slick-initialized
およびslick-slider
次のように、slickを再初期化する前にコンテナからクラスを取得します。
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});
_
注:念のため、構文については滑らかなウェブサイトを確認してください。また、slickが初期化される前にunslickを使用していないことを確認してください。つまり、単に初期化するだけです(このjquery('.my-class').slick({options}
など)。最初のajax呼び出しで初期化されたら、上記の手順に従ってください。
行くぞ、みんな!助けてくれた
$('.slick-slider').not('.slick-initialized').slick({
infinite: false,
slidesToShow: 1,
slidesToScroll: 1,
dots: true,
arrows: false,
touchThreshold: 9
});
$('#slick-slider').slick('refresh'); //Working for slick 1.8.1
このコードを試してください、それは私を助けました!
$('.slider-selector').not('.slick-initialized').slick({
dots: true,
arrows: false,
setPosition: true
});
リクエストを呼び出した後、タイムアウトを設定して滑らかなスライダーを初期化します。
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の後にタイムアウトを設定して初期化するだけです。