slickを使用して、ユーザーが次の矢印をクリックするまでprevコントロールを無効にして非表示にする方法を探します。同様に、ユーザーが最後のスライドに到達したら、Nextコントロールを無効にして非表示にします。
私が達成しようとしていることの良い例は、 ここ
スリックには、私が見落としているこの属性がすでにありますか?これは、無効なクラスを追加することでCSSを使用して達成できる可能性がありますか?
私が見つけた同様の唯一のものはこれです
$('.pages .slider').slick({
autoplay: true,
autoplaySpeed: 5000,
infinite: false,
onAfterChange: function(slide, index) {
if(index == 4){
$('.pages .slider').slickPause();
しかし、それはまさに私が探しているものではありません。
ボタンにcss _pointer-events: none
_を追加できます。そのcssプロパティは、要素のすべてのイベントを無効にします。そのようなものです。
_// Slick stuff
...
onAfterChange: function(slide, index) {
if(index === 4) {
$('.slick-next').css('pointer-events', 'none')
}
else {
$('.slick-next').css('pointer-events', 'all')
}
}
_
また、_.slick-prev
_要素の同じガイドライン上の何か。
その解決策では、configからの関数を取得し、このようなものを使用して参照するだけにしてください。
_// Inside slick config
onAfterChange: afterChange
// Below somewhere
var afterChange = function(slide, index) { //stuff here }
_
また、if
ステートメントで_4
_をハードコーディングする代わりに、スライダーの長さを取得して確認する方法があるかどうかを確認します。おそらく$('.slide').length
のようなことができます
afterChange()
関数を実装する方法は次のとおりです。
_$(document).ready(function(){
$('.scrollable').slick({
dots: false,
slidesToShow: 1,
slidesToScroll: 3,
swipeToSlide: true,
swipe: true,
arrows: true,
infinite: false,
});
$('.scrollable').on('afterChange', function (event, slick, currentSlide) {
if(currentSlide === 2) {
$('.slick-next').addClass('hidden');
}
else {
$('.slick-next').removeClass('hidden');
}
if(currentSlide === 0) {
$('.slick-prev').addClass('hidden');
}
else {
$('.slick-prev').removeClass('hidden');
}
})
});
_
CSSもあります。アニメーションを行いたい場合は、ここで行う必要があります。
_.slick-prev.hidden,
.slick-next.hidden {
opacity: 0;
pointer-events:none;
}
_
Infite:falseを使用して、slick-disabledクラスのカスタムcssを作成するだけです。例えば。
JS-jQuery
$('.my-slider').slick({
infinite: false,
slidesToShow: 1,
slidesToScroll: 1
});
[〜#〜] css [〜#〜]
.slick-disabled {
opacity: 0;
pointer-events:none;
}
最初または最後の項目に到達した場合、前/次ボタンをスタイルする簡単な方法があります。無限モードがfalseに設定されていることを確認してください。次に、ボタンのスタイルを次のようにします。
.slick-arrow[aria-disabled="true"]{
opacity: .5;
}
必要なのはそれだけです!
CSSコードを追加します。
.slick-disabled {
display: none !important;
}
非常に簡単な解決策は次のとおりです。
無限をfalseに設定します。例えば
$('.my-slider').slick({
infinite: false });
次のcssを追加します
.slick-disabled { display: none; pointer-events:none; }
それだけです。
Slick.jsの動作を次のように直接変更しました。
_// making the prevArrow not show on init:
if (_.options.infinite !== true) {
_.$prevArrow
.addClass('slick-disabled')
.attr('aria-disabled', 'true')
.css('display', 'none'); // The new line of code!
}
_
そして:
_if (_.options.arrows === true &&
_.slideCount > _.options.slidesToShow &&
!_.options.infinite
) {
_.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false').css('display', '');
_.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false').css('display', '');
if (_.currentSlide === 0) {
_.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true').css('display', 'none');
_.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false').css('display', '');
} else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {
_.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true').css('display', 'none');
_.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false').css('display', '');
} else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {
_.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true').css('display', 'none');
_.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false').css('display', '');
}
}
_
Jquery .css()
メソッドを使用してdisplay
を設定するだけです。かなり巧妙に動作するようです。
もう1つの方法は、最初のスライドをスワイプ(前)するか、最後のスライドをスワイプ(次)するときに同じスライドにスライドすることです。スワイパーメソッドswiper.SlideTo(n、n、m);を使用します。