一、简介

ScrollSpy 就是滚动监听。设置滚动监听方式有两种:

  1. 标签 API
  2. JavaScript 代码

监听区域也有两种可能:

  1. body 标签
  2. 自定义标签元素

{注意} ScrollSpy 需要 nav 组件的代码 支持,才会正确高亮激活项。

二、通过标签 API

通过标签 API 设置滚动监听的方式,就是在要监听区域上:

  1. 标记为滚动区域:添加 data-spy="scroll"
  2. 指明在滚动过程中受到激活控制的代码单元:data-target="#navbarWrapper"

2.1 借助 body 标签

body {
margin-top: 51px;
} article {
height: 500px;
}
<body data-spy="scroll" data-offset="71" data-target="#navbarWrapper">
<div id="navbarWrapper" class="navbar navbar-default navbar-fixed-top">
<div class="navbar-header">
<a class="navbar-brand" href="#">Project name</a>
</div>
<ul class="nav navbar-nav navbar-right">
<li><a href="#home">Home</a></li>
<li><a href="#profile">Profile</a></li>
<li><a href="#messages">Messages</a></li>
</ul>
</div>
<div id="contentWrapper" class="container">
<article id="home"><h2>Home</h2><P>...</P></article>
<article id="profile"><h2>Profile</h2><P>...</P></article>
<article id="messages"><h2>Messages</h2><P>...</P></article>
</div>
</body>

这里使用了 固定在顶部的导航条,导航条本身有高度 51px,为了不会遮挡住 #contentWrapper 内容区域,需要给 body 设置 margin-top: 51px;内容区域中,#home 中的 h2 标签默认有样式 margin-top: 20px

那么页面加载完成后,若想让 #home 导航项激活,需要给滚动区域(这里指 <body>)添加偏移量 data-offset="71"(至少为 51px + 20px = 71px)。

2.2 借助自定义标签

这里 是完整的例子。

#scrollableWrapper {
height:200px;
overflow:auto;
position: relative;
} article {
height: 500px;
}
<div id="navbarWrapper" class="navbar navbar-default navbar-static">
<div class="navbar-header">
<a class="navbar-brand" href="#">Project name</a>
</div>
<ul class="nav navbar-nav pull-right">
<li><a href="#home">Home</a></li>
<li><a href="#profile">Profile</a></li>
<li><a href="#messages">Messages</a></li>
</ul>
</div>
<div id="scrollableWrapper" data-spy="scroll" data-offset="20" data-target="#navbarWrapper">
<article id="home"><h2>Home</h2></article>
<article id="profile"><h2>Profile</h2></article>
<article id="messages"><h2>Messages</h2></article>
</div>

因为 #home 中的 h2 标签有默认样式 margin-top: 20px,所以还需要给滚动区域(这里指 #scrollableWrapper)添加偏移量 data-offset="20"

三、通过 JavaScript 代码

3.1 借助 body 标签

body {
margin-top: 51px;
} article {
height: 500px;
}
<body>
<div id="navbarWrapper" class="navbar navbar-default navbar-fixed-top">
<!-- some code -->
</div>
<!-- some code -->
</body>
$('body').scrollspy({
target: '#navbarWrapper',
offset: 71
})

3.2 借助自定义标签

#scrollableWrapper {
height:200px;
overflow:auto;
position: relative;
} article {
height: 500px;
}
<div id="navbarWrapper" class="navbar navbar-default navbar-static">
<!-- some code -->
</div>
<div id="scrollableWrapper">
<!-- some code -->
</div>
$('#scrollableWrapper').scrollspy({
target: '#navbarWrapper',
offset: 20
})

四、ScrollSpy 的事件回调

在滚动监听过程中,每当激活一个导航项,都会触发一个事件 activate.bs.scrollspy。必要时,可在这个事件的回调函数里写些业务逻辑。

$('#navbarWrapper').on('activate.bs.scrollspy', function (e) {
console.log(e.target);
})

五、参考链接

http://getbootstrap.com/javascript/#scrollspy

(完)

Bootstrap 的 ScrollSpy的更多相关文章

  1. 滚动监听: bootstrap 的scrollspy

    滚动监听 bootstrap 的scrollspy,需要借助.nav样式,活动的部分是加 .active类.本身导航没有position:fixed,需要自己加入 滚动监听.只有滚动和监听,只有默认锚 ...

  2. 【读书笔记《Bootstrap 实战》】6.单页营销网站

    我们已经掌握了很多实用 Bootstrap  的重要技能.现在,是时候拿出更多的创意来帮助客户实现他们全方位在线营销的愿望了.此次将带领大家做一个漂亮的单页高端营销网站. 主要任务如下: □ 一个大型 ...

  3. Bootstrap滚动监控器

    前面的话 滚动监听插件是用来根据滚动条所处的位置来自动更新导航项的.滚动导航条下面的区域并关注导航项的变化,下拉菜单中的条目也会自动高亮显示.本文将详细介绍Bootstrap滚动监控器 基本用法 滚动 ...

  4. 【Yeoman】热部署web前端开发环境

    本文来自 “简时空”:<[Yeoman]热部署web前端开发环境>(自动同步导入到博客园) 1.序言 记得去年的暑假看RequireJS的时候,曾少不更事般地惊为前端利器,写了<Sp ...

  5. bootstrap插件学习-bootstrap.scrollspy.js

    先看bootstrap.dropdown.js的结构 function ScrollSpy(){} //构造函数 ScrollSpy.prototype = {} //构造器的原型 $.fn.scro ...

  6. Bootstrap的Affix与ScrollSpy用法 bootstrap-scrollspy && bootstrap-dropdown

    bootstrap-scrollspy && bootstrap-dropdown Bootstrap的Affix与ScrollSpy用法 http://9iphp.com/web/j ...

  7. Angular 实现Bootstrap ScrollSpy控件

    Bootstap是基于JQuery开发,Angular中不支持Bootstrap相关事件逻辑.本文基于Typecript开发了一个Angular可用的ScrollSpy控件.Scrollspy控件主要 ...

  8. Bootstrap滚动监听(Scrollspy)插件

    Bootstrap滚动监听(Scrollspy)插件,即自动更新导航插件,会根据滚动条的位置自动更新对应的导航目标

  9. bootstrap源码分析之scrollspy(滚动侦听)

    源码文件: Scrollspy.js 实现功能 1.当滚动区域内设置的hashkey距离顶点到有效位置时,就关联设置其导航上的指定项2.导航必须是 .nav > li > a 结构,并且a ...

随机推荐

  1. nodejs读取excel内容批量替换并生成新的html和新excel对照文件

    因为广告投放需要做一批对外投放下载页面,由于没有专门负责填充页面的编辑同学做,只能前端来做了, 拿到excel看了一下,需要生成200多个文件,一下子懵逼了. 这要是来回复制粘贴太low了 正好最新用 ...

  2. 【pandas】pandas.DataFrame.rename()---重置索引名称

    官方文档 github地址 例子: 创建DataFrame ### 导入模块 import numpy as np import pandas as pd import matplotlib.pypl ...

  3. onclick调用函数的几种!

    ()是个操作,表示执行displayDate方法,你把displayDate方法执行完的返回值赋给onclick能对吗?onclick接受的是Function类型的变量,要么用匿名的方法赋值就是doc ...

  4. bzoj4513 储能表

    求 $\sum\limits_{i=0}^{n-1} \sum\limits_{j=0}^{m-1} max((x \space xor \space j) - k,0)$ ,膜 $p$ $n,m \ ...

  5. (C#)Windows Shell 外壳编程系列2 - 解释,从“桌面”开始展开

    (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一篇:(C#)Windows Shell 外壳编程系列1 - 基础,浏览一个文件夹 让我们详细解释一下 Shell 编程中最基本 ...

  6. centos安装yum源

    网易(163)yum源是国内最好的yum源之一 ,无论是速度还是软件版本,都非常的不错,将yum源设置为163yum,可以提升软件包安装和更新的速度,同时避免一些常见软件版本无法找到.具体设置方法如下 ...

  7. HIVE-如何查看执行日志

    HIVE既然是运行在hadoop上,最后又被翻译为MapReduce程序,通过yarn来执行.所以我们如果想解决HIVE中出现的错误,需要分成几个过程 HIVE自身翻译成为MR之前的解析错误 Hado ...

  8. Java基础--对象克隆

    对象拷贝用于在内存中复制对象,无需构造器便可创建对象. 需要注意的是 1.clone方法提供的只是简单的值拷贝和地址拷贝,若类中包含HashMap等类型时,需要手工编写拷贝过程 2.如果父类没有提供正 ...

  9. bootstrap简单的签收页面

    http://aqvatarius.com/themes/atlant/html/ui-icons.html <%@ Page Language="C#" AutoEvent ...

  10. 忽略‘Chrome正在受到自动软件的控制’的提示语,以及后台静默模式启动。

    一.使用Chrome做的时候,会看到浏览器上方出现‘Chrome正在受到自动软件的控制’的提示语, 若想忽略此提示信息,在浏览器配置里加个参数:disable_infobars 代码如下 : # co ...