2016-12-13 3 views
2

Я пытаюсь запустить событие, когда срабатывает точка останова Slick.js.
Событие init запускается, даже если точка останова не попала.Slick.js - Пользовательская функция ответной точки останова

Есть ли способ вокруг него?

Вот мой код:

var $j = jQuery.noConflict(); 

$j(".homepage_slider").slick({ 
    dots: false, 
    infinite: true, 
    arrows:false, 
    autoplay:true, 
    autoplaySpeed:3500, 
    slidesToShow: 1, 
    slidesToScroll: 1, 
    responsive: [       
     { 
      breakpoint: 480, 
      settings: { 
      init: changeImages() 
      } 
     } 
    ] 
}); 

function changeImages(){ 
    $j('img.slider-image').each(function() { 
     $j(this).attr('src', $j(this).attr('data-mobile')); 
    });      
} 

Я также попытался это, но он не работает:

$j('.homepage_slider').on('breakpoint', function(){ 
    console.log("test"); 
    $j('img.slider-image').each(function() { 
     $j(this).attr('src', $j(this).attr('data-mobile')); 
    }); 
}); 

Любые идеи?

UPDATE:

Найдено этот пост: how to call different jquery actions in responsive design

var isBreakPoint = function (bp) { 
    var bps = [320, 480, 768, 1024], 
     w = $j(window).width(), 
     min, max 
    for (var i = 0, l = bps.length; i < l; i++) { 
     if (bps[i] === bp) { 
      min = bps[i-1] || 0 
      max = bps[i] 
      break 
     } 
    } 
    return w > min && w <= max 
} 

if (isBreakPoint(480)) { 
    $j('img.slider-image').each(function() { 
     $j(this).attr('src', $j(this).attr('data-mobile')); 
    }); 
} 

Этот способ работает, но было бы неплохо, если бы я нашел тот, который работает, когда Slick.js точки останова событие хит так что нет никаких расхождений между два метода.

ответ

1

Посмотрите на   в « События » секции   Slick's documentation:

В гладком 1.4, методы обратного вызова Устаревшие и замененные событиями.
< ...>
точки останова
Аргументы: событие, пятно, точка останова.
Пожары после достижения точки останова.

Так что вам нужно сделать два шага:

  1. Установить контрольные точки, что вам нужно, с помощью опции responsive.
  2. Поймайте событие breakpoint и сделайте все, что захотите.

Например:

var $myCarousel = $('#myCarousel'); 
 

 
/* Step 1 */ 
 
$myCarousel.slick({ 
 
    autoplay: true, 
 
    dots: true, 
 
    responsive: [ 
 
    { breakpoint: 500 }, 
 
    { breakpoint: 768 }, 
 
    { breakpoint: 992 } 
 
    ] 
 
}); 
 

 
/* Step 2 */ 
 
$myCarousel.on('breakpoint', function(event, slick, breakpoint) { 
 
    console.log('breakpoint ' + breakpoint); 
 
});
/* Decorations */ 
 
.my-carousel img { 
 
    width: 100%; 
 
} 
 
.my-carousel .slick-next { 
 
    right: 15px; 
 
} 
 
.my-carousel .slick-prev { 
 
    left: 15px; 
 
    z-index: 1; 
 
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.7.1/slick.min.css"> 
 
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.7.1/slick-theme.css"> 
 

 
<div id="myCarousel" class="my-carousel"> 
 
    <div> 
 
    <img src="//placehold.it/900x300/c69/f9c/?text=1" alt=""> 
 
    </div> 
 
    <div> 
 
    <img src="//placehold.it/900x300/9c6/cf9/?text=2" alt=""> 
 
    </div> 
 
    <div> 
 
    <img src="//placehold.it/900x300/69c/9cf/?text=3" alt=""> 
 
    </div> 
 
</div> 
 

 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.7.1/slick.min.js"></script>