在jQuery单击事件上动态重新计算Bootstrap Affix的offset()

时间:2016-03-29 19:39:55

标签: javascript jquery twitter-bootstrap affix

在我的应用程序中,我有两个jQuery函数:

第一个管理一个简单的slideToggle:

$( ".js-support-toggle" ).click(function(e) {
    e.preventDefault();
    $('.filter-weight').toggleClass('open');
    $('.filter-weight .dropdown-body').slideToggle();
});

相应的标记:

<section class="dropdown filter-weight">
    <a class="dropdown-title js-filter-toggle">Filter</a>
    <div class="dropdown-body">
        ...
    </div><!-- /dropdown-body-->
</section>

第二个使用Bootstrap Affix将辅助导航固定到页面顶部:

/* Affixes sidebar nav to top of screen */
$('#scrollspy').affix({
  offset: {
    top: function () {
      return (this.top = $('.header-wrapper').outerHeight(true) + $('.filter-weight').outerHeight(true) + $('.secondary-navigation').outerHeight(true) + $('.filter-weight').outerHeight(true) + 100)
    },
    bottom: function () {
      return (this.bottom = $('.footer').outerHeight(true))
    }
  }
})

通过收集附加菜单上方的每个元素的outerHeight()值来确定偏移量,包括我的slideToggled .filter-weight元素。

.filter-weight元素折叠时,这一切都非常有效。但是,如果用户将其打开,然后向下滚动页面,则切换元素的添加高度会抛弃我的偏移计算。

如何重写offset()以动态调整到.filter-weight元素的变量高度?

0 个答案:

没有答案