Bootstrap滚动监听(Scrollspy)插件详解


Posted in Javascript onApril 26, 2016

滚动监听(Scrollspy)插件,即自动更新导航插件,会根据滚动条的位置自动更新对应的导航目标。其基本的实现是随着您的滚动,基于滚动条的位置向导航栏添加 .active class。

如果您想要单独引用该插件的功能,那么您需要引用 scrollspy.js。或者,正如 Bootstrap 插件概览 一章中所提到,您可以引用 bootstrap.js 或压缩版的 bootstrap.min.js。

一、用法
您可以向顶部导航添加滚动监听行为:

1、通过 data 属性:向您想要监听的元素(通常是 body)添加 data-spy="scroll"。然后添加带有 Bootstrap .nav 组件的父元素的 ID 或 class 的属性 data-target。为了它能正常工作,您必须确保页面主体中有匹配您所要监听链接的 ID 的元素存在。

<body data-spy="scroll" data-target=".navbar-example">
 ...
 <div class="navbar-example">
  <ul class="nav nav-tabs">
   ...
  </ul>
 </div>
 ...
</body>

2、通过 JavaScript:您可以通过 JavaScript 调用滚动监听,选取要监听的元素,然后调用 .scrollspy() 函数:
$('body').scrollspy({ target: '.navbar-example' })
二、滚动监听
滚动监听插件是用来根据滚动条所处在的位置自动更新导航项目, 显示导航项目高亮显示。

//基本实例
<nav id="nav" class="navbar navbar-default">
  <a href="#" class="navbar-brand">Web 开发</a>
  <ul class="nav navbar-nav">
    <li>
      <a href="#html5">HTML5</a>
    </li>
    <li>
      <a href="#bootstrap">Bootstrap</a>
    </li>
    <li class="dropdown">
      <a href="#" data-toggle="dropdown">JavaScript <span class="caret"></span></a>
      <ul class="dropdown-menu">
        <li>
          <a href="#jquery">jQuery</a>
        </li>
        <li>
          <a href="#yui">Yui</a>
        </li>
        <li>
          <a href="#extjs">Extjs</a>
        </li>
      </ul>
    </li>
  </ul>
</nav>

<div data-offset="0" data-target="#nav" data-spy="scroll" style="height: 200px; overflow: auto; position: relative;padding: 0 10px;">
  <h4 id="html5">HTML5</h4>
  <p>
    标准通用标记语言下的一个应用 HTML 标准自 1999 年 12 月发布的 HTML4.01后,后继的 HTML5 和其它标准被束之高阁,为了推动 Web 标准化运动的发展,一些公司联合起来,成立了一个叫做 Web Hypertext Application Technology Working Group(Web 超文本应用技术工作组 -WHATWG) 的组织。WHATWG 致力于 Web 表单和应用程序,而 W3C(World Wide Web Consortium,万维网联盟) 专注于 XHTML2.0。在 2006 年,

    双方决定进行合作,来创建一个新版本的 HTML。
  </p>
  <h4 id="bootstrap">Bootstrap</h4>
  <p>
    Bootstrap,来自 Twitter,是目前很受欢迎的前端框架。Bootstrap 是基于 HTML、 CSS、 JAVASCRIPT 的, 它简洁灵活, 使得 Web 开发更加快捷。 [1]它由 Twitter的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS/HTML 框架。Bootstrap提供了优雅的 HTML 和 CSS 规范,它即是由动态 CSS 语言 Less 写成。Bootstrap 一经推出后颇受欢迎,一直是 GitHub 上的热门开源项目,包括 NASA 的 MSNBC(微软全国广播公司)的 Breaking News 都使用了该项目。[2]国内一些移动开发者较为熟悉的框架,如 WeX5前端开源框架等,也是基于 Bootstrap 源码进行性能优化而来。[3]
  </p>
  <h4 id="jquery">jQuery</h4>
  <p>
    JQuery 是继 prototype 之后又一个优秀的 Javascript 库。 它是轻量级的 js库 ,它兼容 CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+) ,jQuery2.0 及后续版本将不再支持 IE6/7/8 浏览器。jQuery 使用户能更方便地处理 HTML(标准通用标记语言下的一个应用) 、 events、 实现动画效果, 并且方便地为网站提供 AJAX交互。jQuery 还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。 jQuery 能够使用户的 html 页面保持代码和 html 内容分离, 也就是说, 不用再在 html 里面插入一堆 js 来调用命令了, 只需要定义 id 即可。
  </p>
  <h4 id="yui">Yui</h4>
  <p>
    近几年随着 jQuery、Ext 以及 CSS3 的发展,以 Bootstrap 为代表的前端开发框架如雨后春笋般挤入视野, 可谓应接不暇。 不论是桌面浏览器端还是移动端都涌现出很多优秀的框架,极大丰富了开发素材,也方便了大家的开发。这些框架各有特点,本文对这些框架进行初步的介绍与比较, 希望能够为大家选择框架提供一点帮助, 也为后续详细研究这些框架的抛砖引玉。
  </p>
  <h4 id="extjs">Extjs</h4>
  <p>
    ExtJS 可以用来开发 RIA 也即富客户端的 AJAX 应用,是一个用 javascript写的,主要用于创建前端用户界面,是一个与后台技术无关的前端 ajax 框架。因此,可以把 ExtJS 用在.Net、Java、Php 等各种开发语言开发的应用中。ExtJs 最开始基于 YUI 技术,由开发人员 JackSlocum 开发,通过参考 JavaSwing 等机制来组织可视化组件,无论从 UI 界面上 CSS 样式的应用,到数据解析上的异常处理,都可算是一款不可多得的JavaScript 客户端技术的精品。
  </p>
</div>

这里有两个重要的属性,如下图:

Bootstrap滚动监听(Scrollspy)插件详解

PS:在一个菜单和一个容易的时候,data-target 不设置也可以稳定实现滚动监听高亮。但多个导航时,你不关联其中一个,会导致错误,所以,一般要加上。

如果使用 JavaScript 脚本方式, 可以去掉 data-*, 使用脚本属性定义: offset、 spy和 target。具体方法如下:

//使用脚本方式定义属性

$('#content').scrollspy({
  offset : 0,
  target : '#nav',
});

滚动监听还有一个切换到新条目的事件。

Bootstrap滚动监听(Scrollspy)插件详解

//事件绑定在导航上

$('#nav').on('activate.bs.scrollspy', function() {
    alert('新条目被激活后触发此事件!');
});
滚动监听还有一个更新容器 DOM 的方法。

Bootstrap滚动监听(Scrollspy)插件详解

//HTML 部分

<section class="sec">
  <h4 id="html5">HTML5 <a href="#" onclick="removeSec(this)">删除此项</a></h4>
  <p>
    ...
  </p>
</section>

//删除内容时,刷新一下 DOM,避免导航监听错位

function removeSec(e) {
  $(e).parents('.sec').remove();
  $('#content').scrollspy('refresh');
}

注意:这个方法必须使用 data-*声明式。

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
Ubuntu 11.10 安装Node.js的方法
Nov 30 Javascript
js控制容器隐藏出现防止样式变化的两种方法
Apr 25 Javascript
jQuery实现下滑菜单导航效果代码
Aug 25 Javascript
jQuery实现网页顶部固定导航效果代码
Dec 24 Javascript
Angular实现form自动布局
Jan 28 Javascript
在React框架中实现一些AngularJS中ng指令的例子
Mar 06 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
Nov 22 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
Apr 18 jQuery
js取小数点后两位四种方法
Jan 18 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
Mar 29 Javascript
vue-router两种模式区别及使用注意事项详解
Aug 01 Javascript
js 函数性能比较方法
Aug 24 Javascript
JS组件Bootstrap实现下拉菜单效果代码
Apr 26 #Javascript
基于Jquery插件实现跨域异步上传文件功能
Apr 26 #Javascript
Bootstrap每天必学之模态框(Modal)插件
Apr 26 #Javascript
深入理解JS中的substr和substring
Apr 26 #Javascript
js获取页面及个元素高度、宽度的代码
Apr 26 #Javascript
jQuery javascript获得网页的高度与宽度的实现代码
Apr 26 #Javascript
JQuery给select添加/删除节点的实现代码
Apr 26 #Javascript
You might like
PHP错误抑制符(@)导致引用传参失败Bug的分析
2011/05/02 PHP
php获取一个变量的名字的方法
2014/09/05 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
PHP后门隐藏的一些技巧总结
2020/11/04 PHP
如何重写Laravel异常处理类详解
2020/12/20 PHP
动态为事件添加js代码示例
2009/02/15 Javascript
JavaScript 异步调用框架 (Part 5 - 链式实现)
2009/08/04 Javascript
JSON中双引号的轮回使用过程中一定要小心
2014/03/05 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
2014/07/06 Javascript
jquery实现个人中心导航菜单效果和美观都非常不错
2014/09/02 Javascript
JavaScript中的small()方法使用详解
2015/06/08 Javascript
JavaScript实现基于十进制的四舍五入实例
2015/07/17 Javascript
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
Js中将Long转换成日期格式的实现方法
2018/06/05 Javascript
vue做移动端适配最佳解决方案(亲测有效)
2018/09/04 Javascript
vue favicon设置以及动态修改favicon的方法
2018/12/21 Javascript
angular6的table组件开发的实现示例
2018/12/26 Javascript
[15:09]DOTA2国际邀请赛采访专栏:Loda
2013/08/06 DOTA
python实现360的字符显示界面
2014/02/21 Python
python实现斐波那契递归函数的方法
2014/09/08 Python
python实现批量监控网站
2016/09/09 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
tensorflow 限制显存大小的实现
2020/02/03 Python
matlab灰度图像调整及imadjust函数的用法详解
2020/02/27 Python
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
HTML5中外部浏览器唤起微信分享
2020/01/02 HTML / CSS
浙江文明网签名寄语
2014/01/18 职场文书
幼儿园课题实施方案
2014/05/14 职场文书
祖国在我心中演讲稿600字
2014/09/23 职场文书
委托代理人授权委托书范本
2014/09/24 职场文书
绿色校园广播稿
2014/10/13 职场文书
2014年业务工作总结
2014/11/17 职场文书
担保公司2015年终工作总结
2015/10/14 职场文书
建房合同协议书
2016/03/21 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
2021/05/27 Python