有没有办法组合(收集)所有的滚动功能?

2022-05-14 00:00:00 jquery javascript jquery-events

我有不止一个这样的滚动函数:

第一个

  $(document).scroll(function(){
        if(!$(".hotel-search-box").length){
            return false;
        }
        var y = $(this).scrollTop();
          if (y > $(".hotel-search-box").offset().top) {
            $('.sticky-checkin').show();
          } else {
            $('.sticky-checkin').hide();
          }
    });

第二个

   $(document).scroll(function() {
      if (!$("#aniStickyNav").length) {
     return false; //Check if the element exist
  }
  var y = $(this).scrollTop();
  if (y > $(".after-scroll-sticky").offset().top+$(".hotel-search-box").height()) {
    $('#aniStickyNav').show();
  } else {
    $('#aniStickyNav').hide();
  }
});

第三个

$(window).on('scroll', function () {
    backToTop();
});

我尝试了此方法:

$(window).scroll(function(){
       function siziArayalim(){
           var y = $(this).scrollTop();
      if (y > 800) {
        $('.sizi-arayalim').fadeIn();
      } else {
        $('.sizi-arayalim').fadeOut();
      }
    }
 function aniStickyNav(){
         if (!$("#aniStickyNav").length) {
            return false; //Check if the element exist
        }
      var y = $(this).scrollTop();
      if (y > $(".after-scroll-sticky").offset().top+$(".hotel-search-box").height()) {
        $('#aniStickyNav').show();
      } else {
        $('#aniStickyNav').hide();
      }
    }

function stickyCheckin(){
     if(!$(".hotel-search-box").length){
        return false;
    }
    var y = $(this).scrollTop();
      if (y > $(".hotel-search-box").offset().top) {
        $('.sticky-checkin').show();
      } else {
        $('.sticky-checkin').hide();
      }
}
  siziArayalim();
  aniStickyNav();
  stickyCheckin();
});

但都不起作用。

由于多个滚动函数,一些js函数无法正常工作,这就是为什么我想知道如何将所有window.scroll函数组合成一个健康的函数?


解决方案

您的代码有一些问题,第一个问题是您在滚动函数中声明函数。这对性能是不好的。第二个参数是您在函数中使用的$(This)。我不知道这是什么意思。在您正在使用上下文中,这将是Window对象,但我认为这不是您需要的。需要更多信息,请点击此处。

function siziArayalim(){
    var y = $(this).scrollTop();
    if (y > 800) {
        $('.sizi-arayalim').fadeIn();
    } else {
        $('.sizi-arayalim').fadeOut();
    }
}

function aniStickyNav(){
    if (!$("#aniStickyNav").length) {
        return false; //Check if the element exist
    }
    var y = $(this).scrollTop();
    if (y > $(".after-scroll-sticky").offset().top+$(".hotel-search-box").height()) {
        $('#aniStickyNav').show();
    } else {
        $('#aniStickyNav').hide();
    }

    return true;
}


function stickyCheckin(){
    if(!$(".hotel-search-box").length){
        return false;
    }
    var y = $(this).scrollTop();
    if (y > $(".hotel-search-box").offset().top) {
        $('.sticky-checkin').show();
    } else {
        $('.sticky-checkin').hide();
    }

    return true;
}


$(window).scroll(function(){
    siziArayalim();

    // check if the functions return false, if not, continue
    if(!aniStickyNav()){
        return false;
    }

    if(!stickyCheckin()){
        return false;
    }
});

相关文章