一、简介

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. UVA - 11014 Make a Crystal (莫比乌斯反演)

    给定一个n*n*n的立方体(中心点为原点O),选择尽量多的点,使得对于任意两点A,B,B不在线段OA上. 可以发现,原问题可转化为三维坐标下的点(x,y,z)中有多少个点的gcd(x,y,z)=1. ...

  2. JvisualVm添加远程监控

    一.Weblogic远程监控 1.首先需要在远程的weblogic的域下面,找到/bin/ setDomainEnv.sh ,需要在此文件下加入如下内容: -Dcom.sun.management.j ...

  3. Python函数-compile()

    compile(source, filename, mode[, flags[, dont_inherit]]) 作用: 将source编译为代码或者AST对象.代码对象能够通过exec语句来执行或者 ...

  4. ubuntu 迁移部分 / 目录下的存储空间到 /home目录

    状况:当时给系统分区的时候,home和根目录都是25GB左右,突然发现home 目录不够用了,于是决定进行将根目录的部分空间挪移到home下去 主要方法:使用Gparted的LIve USB的方法. ...

  5. DCOS安装

    安装pre-flight master机器会安装上安装文件(同时check条件是否满足要求),其他的agent设备只是check各种条件是否具备. 确保53/2181端口没有被占用:centos7每次 ...

  6. 5、Selenium+Python自动登录163邮箱发送邮件

    1.Selenium实现自动化,需要定位元素,以下查看163邮箱的登录元素 (1)登录(定位到登录框,登录框是一个iframe,如果没有定位到iframe,是无法定位到账号框与密码框) 定位到邮箱框( ...

  7. 修改windows文件的换行符

    应用场景: 在办公中,有可能存在,某些命令脚本使用windows下的文本编辑器进行编写 当放到测试环境的Linux中时,运行报错 需要使用的软件:xxd hexdump  dos2unix 1.运行w ...

  8. 导入镜像后,容器内httpd起不来

    导入镜像后发现bash进程为1 与之前apache启动的进程冲突了 解决办法:删除apache进程号,通过apachectl重启apache进程

  9. 【转】LTE基本架构

    这篇文章主要介绍LTE的最基础的架构,包括LTE网络的构成,每一个网络实体的作用以及LTE网络协议栈,最后还包括对一个LTE数据流的模型的说明. LTE网络参考模型 这是一张非常有名的LTE架构图,从 ...

  10. 机器学习:偏差方差权衡(Bias Variance Trade off)

    一.什么是偏差和方差 偏差(Bias):结果偏离目标位置: 方差(Variance):数据的分布状态,数据分布越集中方差越低,越分散方差越高: 在机器学习中,实际要训练模型用来解决一个问题,问题本身可 ...