使用Twitter引导更新基于滚动位置的DOM?

使用Twitter引导更新基于滚动位置的DOM?,dom,position,twitter-bootstrap,Dom,Position,Twitter Bootstrap,如果您查看此页面: 记下子菜单及其位置。现在向下滚动-注意它是如何变化的?我假设他们用scrollspy插件实现了它,但我似乎不知道怎么做,我所能做的就是更新哪个列表元素有活动类 任何帮助都将不胜感激:您可以在application.js文件中找到这段代码,它看起来好像没有包含在下载中。它是可用的…有趣的是,标题注释是这样写的 // NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT // IT'S ALL JUST JUNK FOR OUR DOCS! //

如果您查看此页面:

记下子菜单及其位置。现在向下滚动-注意它是如何变化的?我假设他们用scrollspy插件实现了它,但我似乎不知道怎么做,我所能做的就是更新哪个列表元素有活动类


任何帮助都将不胜感激:

您可以在application.js文件中找到这段代码,它看起来好像没有包含在下载中。它是可用的…有趣的是,标题注释是这样写的

// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT
// IT'S ALL JUST JUNK FOR OUR DOCS!
// ++++++++++++++++++++++++++++++++++++++++++
我相信这是完成繁重任务的部分…还没有测试它,只是在Chrome中完成了代码

// fix sub nav on scroll
var $win = $(window)
  , $nav = $('.subnav')
  , navTop = $('.subnav').length && $('.subnav').offset().top - 40
  , isFixed = 0

processScroll()

$win.on('scroll', processScroll)

function processScroll() {
  var i, scrollTop = $win.scrollTop()
  if (scrollTop >= navTop && !isFixed) {
    isFixed = 1
    $nav.addClass('subnav-fixed')
  } else if (scrollTop <= navTop && isFixed) {
    isFixed = 0
    $nav.removeClass('subnav-fixed')
  }
}

CCBlackburn的答案很接近,尽管它缺少所需的样式表。为了子孙后代,我还加入了javascript。无论如何,我使用以下方法使其工作:

Javascript

// fix sub nav on scroll
var $win = $(window)
  , $nav = $('.subnav')
  , navTop = $('.subnav').length && $('.subnav').offset().top - 40
  , isFixed = 0

processScroll()

// hack sad times - holdover until rewrite for 2.1
$nav.on('click', function () {
  if (!isFixed) setTimeout(function () {  $win.scrollTop($win.scrollTop() - 47) }, 10)
})

$win.on('scroll', processScroll)

function processScroll() {
  var i, scrollTop = $win.scrollTop()
  if (scrollTop >= navTop && !isFixed) {
    isFixed = 1
    $nav.addClass('subnav-fixed')
  } else if (scrollTop <= navTop && isFixed) {
    isFixed = 0
    $nav.removeClass('subnav-fixed')
  }
}
/* Fixed subnav on scroll, but only for 980px and up (sorry IE!) */
@media (min-width: 980px) {
  .subnav-fixed {
    position: fixed;
    top: 40px;
    left: 0;
    right: 0;
    z-index: 1020; /* 10 less than .navbar-fixed to prevent any overlap */
    border-color: #d5d5d5;
    border-width: 0 0 1px; /* drop the border on the fixed edges */
    -webkit-border-radius: 0;
       -moz-border-radius: 0;
            border-radius: 0;
    -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 5px rgba(0,0,0,.1);
       -moz-box-shadow: inset 0 1px 0 #fff, 0 1px 5px rgba(0,0,0,.1);
            box-shadow: inset 0 1px 0 #fff, 0 1px 5px rgba(0,0,0,.1);
    filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); /* IE6-9 */
  }
  .subnav-fixed .nav {
    width: 938px;
    margin: 0 auto;
    padding: 0 1px;
  }
  .subnav .nav > li:first-child > a,
  .subnav .nav > li:first-child > a:hover {
    -webkit-border-radius: 0;
       -moz-border-radius: 0;
            border-radius: 0;
  }
}

/* LARGE DESKTOP SCREENS */
@media (min-width: 1210px) {

  /* Update subnav container */
  .subnav-fixed .nav {
    width: 1168px; /* 2px less to account for left/right borders being removed when in fixed mode */
  }

}