javascript - 粘性侧边栏停止在页脚上方 30 像素?

标签 javascript jquery html css

我有一个粘性侧边栏,但是我想让它在他高于#footer 30px 时停止。我该怎么做?

$(function(){ // document ready
  if (!!$('.sticky').offset()) { // make sure ".sticky" element exists
    var stickyTop = $('.sticky').offset().top; // returns number 
    $(window).scroll(function(){ // scroll event
      var windowTop = $(window).scrollTop(); // returns number 
      var CurrentWidth = $('.sidebar').width();
      if (stickyTop < windowTop){
        $('.sticky').css({ position: 'fixed', top: 0, width:CurrentWidth });
      } else {
        $('.sticky').css('position','static');
      }
    });
  }
});




        <div class="col-md-3">
<aside class="sidebar  sticky">

          <nav>
            <ul class="sidebar-links">

<li><a href="#">Privacy policy</a></li>
<li><a href="#">Privacy policy</a></li>
<li><a href="#">Privacy policy</a></li>
<li><a href="#">Privacy policy</a></li>
<li><a href="#">Privacy policy</a></li>
<li><a href="#">Privacy policy</a></li>
<li><a href="#">Privacy policy</a></li>
<li><a href="#">Privacy policy</a></li>
            </ul>
          </nav>


        </aside>


        </div>

最佳答案

只需要添加 $(element).offset().top 来检测页脚顶部的位置,然后为滚动功能添加检查。

这是我们要添加到滚动功能的部分:

var footerAboveThirty = $('footer').offset().top - 30;

if (windowTop > footerAboveThirty) {
  $('.sticky').css({ position: 'absolute', top: footerAboveThirty, width: CurrentWidth });
} else {
  $('.sticky').css({ position: 'fixed', top: 0, width:CurrentWidth });
}

这是在上下文中:

$(function(){ // document ready
  if (!!$('.sticky').offset()) { // make sure ".sticky" element exists
    var stickyTop = $('.sticky').offset().top; // returns number 
    $(window).scroll(function(){ // scroll event
      var windowTop = $(window).scrollTop(); // returns number 
      var CurrentWidth = $('.sidebar').width();
      if (stickyTop < windowTop){
        //NEW SECTION
        var footerAboveThirty = $('footer').offset().top - 30;
        if (windowTop > footerAboveThirty) {
          $('.sticky').css({ position: 'absolute', top: footerAboveThirty, width: CurrentWidth });
        } else {
          $('.sticky').css({ position: 'fixed', top: 0, width:CurrentWidth });
        }
        //END NEW SECTION
      } else {
        $('.sticky').css('position','static');
      }
    });
  }
});

更新:

另外,一定要包括粘性元素的高度。所以这一行:

var footerAboveThirty = $('footer').offset().top - 30;

更改为

var footerAboveThirty = $('footer').offset().top - $('.sticky').height() - 30;

JSFiddle example

关于javascript - 粘性侧边栏停止在页脚上方 30 像素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28988890/

相关文章:

php - 使用 PHP、ajax、jQuery 在 Mysql 中动态创建表

javascript - .css() 函数不会为任何元素设置任何属性

javascript - jQuery 无法在克隆后删除部分

html - IE7 下拉菜单让 li 填充剩余空间

javascript - 为什么在严格模式下不允许八进制数字文字(解决方法是什么?)

javascript - 将参数附加到 api 请求?

javascript - 之前的 Jquery 事件设置了未定义的值

javascript - 从底部 css 动画中提升(显示)文本

javascript - 无法在 Javascript 测验中显示最终分数

jquery - HTML 表格,用户可以通过拖动来动态更改列的宽度