如何将.on(' load'),. scroll()和.resize()应用于粘性卷轴

时间:2016-08-23 15:31:13

标签: javascript jquery css

我有一个功能,可以在加载和滚动时设置div(#sticky)的顶部位置。但当然变量会随着页面大小的变化而变化,所以我需要.resize()事件。

当我在页面加载和滚动时运行代码时,它工作正常,但如果我调整页面大小,则滚动#sticky的顶部位置设置为0.

如何更正此问题?

$(document).ready(function(){
  sticky = $('#sticky'),
  stickyPadding = 80;

  if($(sticky).length && ($(window).width() >= 900)){
    $(sticky).css('position','relative');

    $(window).on('load',function(){
      getStickyMeasurements();
      stickEl()();
      $(window).resize(function(){
        getStickyMeasurements();
      });
      $(window).scroll(stickEl());
    });
  }
});
function getStickyMeasurements(){
  elHeight = $(sticky).outerHeight();
  initialElToTop = $(sticky).offset().top;
  dynamicStickyLimiter = $('.entry-content-extra').length ? $('.entry-content-extra').offset().top : $('footer').offset().top
  stickyLimit = dynamicStickyLimiter - initialElToTop;
}

function stickEl(){
  return function(){
    elTopModifier = $(window).scrollTop() - initialElToTop;

    if( stickyLimit <= (elTopModifier + elHeight + stickyPadding)){
      stickyTopResult = stickyLimit - elHeight;
    }else if($(window).scrollTop() + stickyPadding >= initialElToTop){
      stickyTopResult = elTopModifier + stickyPadding;
    }else{
      stickyTopResult = 0;
    }
    $(sticky).css('top', stickyTopResult + 'px');
  }
}

另外,我知道我的变量的范围需要工作,所以如果你在答案的一部分中包含它,那也会有所帮助(但不是必须接受的答案)。

0 个答案:

没有答案