微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当 div 到达视口顶部时,在 slick.js 中激活 MouseScroll

如何解决当 div 到达视口顶部时,在 slick.js 中激活 MouseScroll

标题描述了我的需求。什么实际有效:

$(document).ready(function() {

  const slider = $('.slider');
  
  function onSliderAfterChange(event,slick,currentSlide) {
    $(event.target).data('current-slide',currentSlide);
  }
  
  function onSliderWheel(e) {
    var deltaY = e.originalEvent.deltaY,$currentSlider = $(e.currentTarget),currentSlickIndex = $currentSlider.data('current-slide') || 0;
    
    if (
      // check when you scroll up
      (deltaY < 0 && currentSlickIndex == 0) ||
      // check when you scroll down
      (deltaY > 0 && currentSlickIndex == $currentSlider.data('slider-length') - 1)
    ) {
      return;
    }

    e.preventDefault();

    if (e.originalEvent.deltaY < 0) {
      $currentSlider.slick('slickPrev');
    } else {
      $currentSlider.slick('slickNext');
    }
  }
  
  slider.each(function(index,element) {
    var $element = $(element);
    // set the length of children in each loop
    // but the better way for performance is to set this data attribute on the div.slider in the markup
    $element.data('slider-length',$element.children().length);
  })
  .slick({
    infinite: false,slidesToShow: 1,slidesToScroll: 1,dots: false,arrows: false
  })
  .on('afterChange',onSliderAfterChange)
  .on('wheel',onSliderWheel);

});
$(document).ready(function() {
  $('.test').attr("attop",false);
  var lastScrollTop = 0;
  $(window).on('scroll',function() {
    var windowScrollTop = $(this).scrollTop();


    if (windowScrollTop > lastScrollTop) {
        var currentDiv = $('.test[attop="false"]:first');
        if (currentDiv && currentDiv.length > 0) {
            if (windowScrollTop >= currentDiv.offset().top) {
                currentDiv.attr('attop',true);
                alert('reached top');
            }
        }

    } else {//this part needs to be removed to call only once
        var currentTopDivs = $('.test[attop="true"]');
        if (currentTopDivs && currentTopDivs.length > 0) {
            $.each(currentTopDivs,function(i,elem){
                if (windowScrollTop <= $(elem).offset().top) {
                    $(elem).attr('attop',false);
                }                   
            });
        }
    }
    lastScrollTop = windowScrollTop;

  });
});

我的最后一个问题,根据我的需要把它放在一起。 我试着把代码的第一部分,没有

$(document).ready(function() {

进入第二部分,其中

alert('reached top');

但幸运的是,什么都没发生。

感谢您的提示

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。