天天看点

Bootstrap 滚动监听(Scrollspy)插件

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

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

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

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

<b>通过 JavaScript</b>:您可以通过 JavaScript 调用滚动监听,选取要监听的元素,然后调用 <b>.scrollspy()</b> 函数:

下面的实例演示了通过 data 属性使用滚动监听(Scrollspy)插件:

&lt;nav id="navbar-example" class="navbar navbar-default navbar-static" role="navigation"&gt;

&lt;div class="container-fluid"&gt;

&lt;div class="navbar-header"&gt;

&lt;button class="navbar-toggle" type="button" data-toggle="collapse"

data-target=".bs-js-navbar-scrollspy"&gt;

&lt;span class="sr-only"&gt;切换导航&lt;/span&gt;

&lt;span class="icon-bar"&gt;&lt;/span&gt;

&lt;/button&gt;

&lt;a class="navbar-brand" href="#"&gt;教程名称&lt;/a&gt;

&lt;/div&gt;

&lt;div class="collapse navbar-collapse bs-js-navbar-scrollspy"&gt;

&lt;ul class="nav navbar-nav"&gt;

&lt;li&gt;&lt;a href="#ios"&gt;iOS&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="#svn"&gt;SVN&lt;/a&gt;&lt;/li&gt;

&lt;li class="dropdown"&gt;

&lt;a href="#" id="navbarDrop1" class="dropdown-toggle"

data-toggle="dropdown"&gt;Java

&lt;b class="caret"&gt;&lt;/b&gt;

&lt;/a&gt;

&lt;ul class="dropdown-menu" role="menu"

aria-labelledby="navbarDrop1"&gt;

&lt;li&gt;&lt;a href="#jmeter" tabindex="-1"&gt;jmeter&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="#ejb" tabindex="-1"&gt;ejb&lt;/a&gt;&lt;/li&gt;

&lt;li class="divider"&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="#spring" tabindex="-1"&gt;spring&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/nav&gt;

&lt;div data-spy="scroll" data-target="#navbar-example" data-offset="0"

style="height:200px;overflow:auto; position: relative;"&gt;

&lt;h4 id="ios"&gt;iOS&lt;/h4&gt;

&lt;p&gt;iOS 是一个由苹果公司开发和发布的手机操作系统。最初是于 2007 年首次发布 iPhone、iPod Touch 和 Apple

TV。iOS 派生自 OS X,它们共享 Darwin 基础。OS X 操作系统是用在苹果电脑上,iOS 是苹果的移动版本。

&lt;/p&gt;

&lt;h4 id="svn"&gt;SVN&lt;/h4&gt;

&lt;p&gt;Apache Subversion,通常缩写为 SVN,是一款开源的版本控制系统软件。Subversion 由 CollabNet 公司在 2000 年创建。但是现在它已经发展为 Apache Software Foundation 的一个项目,因此拥有丰富的开发人员和用户社区。

&lt;h4 id="jmeter"&gt;jMeter&lt;/h4&gt;

&lt;p&gt;jMeter 是一款开源的测试软件。它是 100% 纯 Java 应用程序,用于负载和性能测试。

&lt;h4 id="ejb"&gt;EJB&lt;/h4&gt;

&lt;p&gt;Enterprise Java Beans(EJB)是一个创建高度可扩展性和强大企业级应用程序的开发架构,部署在兼容应用程序服务器(比如 JBOSS、Web Logic 等)的 J2EE 上。

&lt;h4 id="spring"&gt;Spring&lt;/h4&gt;

&lt;p&gt;Spring 框架是一个开源的 Java 平台,为快速开发功能强大的 Java 应用程序提供了完备的基础设施支持。

&lt;p&gt;Spring 框架最初是由 Rod Johnson 编写的,在 2003 年 6 月首次发布于 Apache 2.0 许可证下。

结果如下所示:

Bootstrap 滚动监听(Scrollspy)插件

通过 data 属性或 JavaScript 来传递。下表列出了这些选项:

选项名称

类型/默认值

Data 属性名称

描述

offset

number

默认值:10

data-offset

当计算滚动位置时,距离顶部的偏移像素。

<b>.scrollspy('refresh')</b>:当通过 JavaScript 调用 scrollspy 方法时,您需要调用 <b>.refresh</b> 方法来更新 DOM。这在 DOM 的任意元素发生变更(即,您添加或移除了某些元素)时非常有用。下面是使用该方法的语法。

下面的实例演示了 <b>.scrollspy('refresh')</b> 方法的用法:

&lt;nav id="myScrollspy" class="navbar navbar-default navbar-static" role="navigation"&gt;

&lt;li class="active"&gt;&lt;a href="#ios"&gt;iOS&lt;/a&gt;&lt;/li&gt;

&lt;div data-spy="scroll" data-target="#myScrollspy" data-offset="0"

&lt;div class="section"&gt;

&lt;h4 id="ios"&gt;iOS&lt;small&gt;&lt;a href="#" onclick="removeSection(this);"&gt;

&amp;times; 删除该部分&lt;/a&gt;&lt;/small&gt;

&lt;/h4&gt;

TV。iOS 派生自 OS X,它们共享 Darwin 基础。OS X 操作系统是用在苹果电脑上,iOS 是苹果的移动版本。&lt;/p&gt;

&lt;h4 id="svn"&gt;SVN&lt;small&gt;&lt;/small&gt;&lt;/h4&gt;

&lt;p&gt;Apache Subversion,通常缩写为 SVN,是一款开源的版本控制系统软件。Subversion 由 CollabNet 公司在 2000 年创建。但是现在它已经发展为 Apache Software Foundation 的一个项目,因此拥有丰富的开发人员和用户社区。&lt;/p&gt;

&lt;h4 id="jmeter"&gt;jMeter&lt;small&gt;&lt;a href="#" onclick="removeSection(this);"&gt;

&lt;p&gt;jMeter 是一款开源的测试软件。它是 100% 纯 Java 应用程序,用于负载和性能测试。&lt;/p&gt;

&lt;p&gt;Enterprise Java Beans(EJB)是一个创建高度可扩展性和强大企业级应用程序的开发架构,部署在兼容应用程序服务器(比如 JBOSS、Web Logic 等)的 J2EE 上。&lt;/p&gt;

&lt;p&gt;Spring 框架是一个开源的 Java 平台,为快速开发功能强大的 Java 应用程序提供了完备的基础设施支持。&lt;/p&gt;

&lt;p&gt;Spring 框架最初是由 Rod Johnson 编写的,在 2003 年 6 月首次发布于 Apache 2.0 许可证下。&lt;/p&gt;

&lt;script&gt;

$(function(){

removeSection = function(e) {

$(e).parents(".section").remove();

$('[data-spy="scroll"]').each(function () {

var $spy = $(this).scrollspy('refresh')

});

}

$("#myScrollspy").scrollspy();

&lt;/script&gt;

Bootstrap 滚动监听(Scrollspy)插件

下表列出了滚动监听中要用到事件。这些事件可在函数中当钩子使用。

事件

实例

activate.bs.scrollspy

每当一个新项目被滚动监听激活时,触发该事件。

下面的实例演示了 <b>activate.bs.scrollspy</b> 事件的用法:

data-toggle="dropdown"&gt;

Java &lt;b class="caret"&gt;&lt;/b&gt;

&lt;span id="activeitem" style="color:red;"&gt;&lt;/span&gt;

$('#myScrollspy').on('activate.bs.scrollspy', function () {

var currentItem = $(".nav li.active &gt; a").text();

$("#activeitem").html("目前您正在查看 - " + currentItem);

})

Bootstrap 滚动监听(Scrollspy)插件

以下实例演示了如何创建水平滚动监听:

&lt;!-- The navbar:

used to jump to a section in the scrollable area --&gt;

&lt;nav

class="navbar navbar-inverse navbar-fixed-top"&gt;

...

  &lt;ul class="nav

navbar-nav"&gt;

    &lt;li&gt;&lt;a href="#section1"&gt;Section 1&lt;/a&gt;&lt;/li&gt;

&lt;!-- The scrollable area --&gt;

&lt;div data-spy="scroll"

data-target=".navbar" data-offset="12"&gt;

  &lt;!-- Section 1

--&gt;

  &lt;div id="section1"&gt;

&lt;h1&gt;Section 1&lt;/h1&gt;

    &lt;p&gt;Try to scroll this page and look at

the navigation bar while scrolling!&lt;/p&gt;

  ...

以下实例演示了如何创建垂直滚动监听:

&lt;body data-spy="scroll" data-target="#myScrollspy" data-offset="20"&gt;

&lt;div class="container"&gt;

    &lt;div class="row"&gt;

&lt;nav class="col-sm-3" id="myScrollspy"&gt;

&lt;ul class="nav nav-pills nav-stacked"&gt;

&lt;li&gt;&lt;a href="#section1"&gt;Section 1&lt;/a&gt;&lt;/li&gt;

      &lt;/nav&gt;

      &lt;div

class="col-sm-9"&gt;

        &lt;div id="section1"&gt;

          &lt;h1&gt;Section 1&lt;/h1&gt;

          &lt;p&gt;Try to

scroll this page and look at the navigation list while scrolling!&lt;/p&gt;

        &lt;/div&gt;

        ...

      &lt;/div&gt;

    &lt;/div&gt;

&lt;/body&gt;