bootstap 滚动监听

---首先结合源代码介绍官网的说明

---然后总结了使用滚动监听的几个步骤

---最后给出一个简单的例子

---关键的一点:整体有点零散和乱七八糟,辛苦你的思维和眼睛了,呵呵

----------------------------------------------------------------------------------------------------------

1. Scrollspy currently requires the use of a Bootstrap nav component for proper highlighting of active links.

    ---- 使用滚动监听的话,导航栏必须采用 class="nav"的nav组件才可以:

    下面是源代码中的一段,标红的部分可以证明这一点:

    使用ScrollSpy的时候,需要采用<ul class="nav">标签,并且在<li>下必须有<a>标签。

 注:另外我们需要把<ul class="nav">标签放到另一个容器内(如div),并给父容器添加一个id属性(这一点在第4节有介绍)

 1 function ScrollSpy(element, options) {
 2     this.$body          = $(document.body)
 3     this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
 4     this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)
 5     this.selector       = (this.options.target || ‘‘) + ‘ .nav li > a‘
 6     this.offsets        = []
 7     this.targets        = []
 8     this.activeTarget   = null
 9     this.scrollHeight   = 0
10
11     this.$scrollElement.on(‘scroll.bs.scrollspy‘, $.proxy(this.process, this))
12     this.refresh()
13     this.process()
14   }

2. Navbar links must have resolvable id targets. For example, a <a href="#home">home</a> must correspond to something in the DOM like <div id="home"></div>.

    --- 简单的说,就是<li>下的<a>标签必须有一个href="#id"属性,并且在滚动的内容里面,必须有对应的<a id="id"></a>这样的标签;当内容滚动到<a id="id">标签时,对应的<li>的<a href="#id">就会自动被选中。

    --其实这一点做过Web开发的朋友都知道,在之前的HTML版本中,锚标记 通常采用<a name="tag">这样的方式,但HTML5中的锚标记已经抛弃了name属性,而是采用id属性

 ScrollSpy.prototype.activate = function (target) {
    this.activeTarget = target

    this.clear()

    var selector = this.selector +
      ‘[data-target="‘ + target + ‘"],‘ +
      this.selector + ‘[href="‘ + target + ‘"]‘

    var active = $(selector)
      .parents(‘li‘)
      .addClass(‘active‘)

    if (active.parent(‘.dropdown-menu‘).length) {
      active = active
        .closest(‘li.dropdown‘)
        .addClass(‘active‘)
    }

    active.trigger(‘activate.bs.scrollspy‘)
  }

3. No matter the implementation method, scrollspy requires the use of position: relative; on the element you‘re spying on. In most cases this is the <body>. When scrollspying on elements other than the <body>, be sure to have a height set and overflow-y: scroll; applied.

  --- 如果监听Body的滚动,那么你必须给body添加position:relative样式

  --- 如果监听的不是Body,而是其他得元素[貌似这种方式常见],那么你需要添加三个样式:position:relative;height:500px;overflow-y:scroll;

ScrollSpy.prototype.refresh = function () {
    var that          = this
    var offsetMethod  = ‘offset‘
    var offsetBase    = 0

    this.offsets      = []
    this.targets      = []
    this.scrollHeight = this.getScrollHeight()

    if (!$.isWindow(this.$scrollElement[0])) {
      offsetMethod = ‘position‘
      offsetBase   = this.$scrollElement.scrollTop()
    }

4. To easily add scrollspy behavior to your topbar navigation, add data-spy="scroll" to the element you want to spy on (most typically this would be the <body>). Then add the data-target attribute with the ID or class of the parent element of any Bootstrap .navcomponent.

  ---  你需要给滚动内容的标签添加 data-spy="scroll"属性和data-target属性

    data-spy 属性指明了被监听的元素,data-target属性指明滚动时需要控制的nav高亮显示

  再看一次下面的初始化源代码,标红的位置,this.options.target的值,就等于滚动内容元素的data-target的值,看到这里,你或许已经想到,在定义.nav组件的时候,我们需要把.nav放在另一个容器内(比如div),且该容器需要有一个id属性(与这里data-target需要设置的值相同)。

function ScrollSpy(element, options) {
    this.$body          = $(document.body)
    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)
    this.selector       = (this.options.target || ‘‘) + ‘ .nav li > a‘
    this.offsets        = []
    this.targets        = []
    this.activeTarget   = null
    this.scrollHeight   = 0

    this.$scrollElement.on(‘scroll.bs.scrollspy‘, $.proxy(this.process, this))
    this.refresh()
    this.process()
  }

5. After adding position: relative; in your CSS, call the scrollspy via JavaScript:

    $(‘yourTag‘).scrollspy({ target: ‘nav-parent-div-id‘ })-- yourTag 就是要承载滚动内容的元素的ID,nav-parent-div-id 就是.nav元素的父元素的id(也就是data-target的值)

乱七八糟写了一堆,下面总结一个简单的几个步骤:

  1. 添加标签<div id="scrollSpyID">

  2. 在标签内添加.nav组件,并给li->a添加href="#tag"属性

  3. 添加<div id="content" data-spy="scroll" data-target="#scrollSpyID">;

  4. 添加样式#content{height:500px;overflow-y:scroll;opsition:relative;}

  5. 添加脚本$(‘#content‘).scrollspy({target:‘scrollSpyID‘});

 最后来个小栗子:

<style type="text/css">
        #body {
            position: relative;
            height: 500px;
            overflow-y: scroll;
        }
    </style>
 <div id="sc">
        <ul class="nav nav-pills">
            <li class="active">
                <a href="#A">第一段</a>
            </li>
            <li>
                <a href="#B">第二段</a>
            </li>
            <li>
                <a href="#C">第三段</a>
            </li>
        </ul>

    </div>
<div id="body" class="container-fluid" data-spy="scroll" data-target="#sc">

  <a id="A">第一段</a><br />

    <!-- 这里要有很多内容,至少要保证可以滚动 -->

  <a id="A">第二段</a><br />

    <!-- 这里要有很多内容,至少要保证可以滚动 -->

  <a id="A">第三段</a><br />

    <!-- 这里要有很多内容,至少要保证可以滚动 -->

</div>
$(function () {
    $(‘#body‘).scrollspy({ target: ‘#sc‘ });
});

 

时间: 2024-12-14 16:14:33

bootstap 滚动监听的相关文章

滚动监听(bootstrap)

1.05 腊八节   一直都想知道滚动监听是怎么做出来的,今天终于扒拉出来了,在使用的时候只要加上div定位就可以了... <head> <link rel="stylesheet" href="https://cdn.static.runoob.com/libs/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="https://cdn.static.runoob.com

Bootstrap入门(二十六)JS插件3:滚动监听

很多时候我们在浏览一些网页的时候,导航条会根据我们浏览网页的进度而发生不同的变化,这种就是滚动监听. 你的顶栏导航,添加data-spy="scroll"到您想要刺探(最典型的是这将是该元素<body>).然后添加data-target任何引导的父元素的ID或类属性.nav的组件. 我们来写一个基本的实例 先引入CSS文件 <link href="bootstrap.min.css" rel="stylesheet"> 我

滚动监听

滚动监听插件是用来根据滚动条所处的位置来自动更新导航项的.如下所示,滚动导航条下面的区域并关注导航项的变化.下拉菜单中的条目也会自动高亮显示. 用法 依赖 Bootstrap 的导航组件 滚动监听插件依赖 Bootstrap 的导航组件 用于高亮显示当前激活的链接. body { position: relative; } 通过 data 属性调用 <body data-spy="scroll" data-target=".navbar-example">

bootstrap滚动监听

Bootstrap ScrollSpy(滚动监听)是bootstrap插件提供的一个非常有趣的功能.当页面空间有限的时候我们可以利用它来显示我们想要显示的内容 官方说的想要利用此功能需要引入以下文件: bootstrap/css/bootstrap.css    jquery.1.9.1.js    bootstrap.js    bootstrap-dropdown.js    bootstrap-scrollspy.js 不过经过测试 只需要前三个即可 以下是我测试的代码: <!DOCTYP

vue监听滚动事件,实现滚动监听

在vue中实现滚动监听和原生js无太大差异,下面是一个简单的demo,可在控制台查看结果 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script type="text/javascript" src="https://unpkg

滚动监听: bootstrap 的scrollspy

滚动监听 bootstrap 的scrollspy,需要借助.nav样式,活动的部分是加 .active类.本身导航没有position:fixed,需要自己加入 滚动监听.只有滚动和监听,只有默认锚点链接做调转,若想改变,只有自己写跳转方法-- 阻止a标签跳转(不直接用锚点链接做跳转):而是用animate(scrollTop)跳转,scrollTop可以设置距顶端的距离.animate({scrollTop: }); html <div id="menu"> <d

jQuery页面滚动监听事件及高级效果插件

jQuery页面滚动监听事件及高级效果插件 1. One Page scroll (只适用于上下焦点图)http://www.thepetedesign.com/demos/onepage_scroll_demo.html 2. Scrolld(更不好用)https://github.com/charliegeiger89/Scrolld.js#readme 3. Animate Scroll(参数太少,不好用)https://github.com/ramswaroop/animatescrol

Bootstrap学习js插件篇之滚动监听

1.滚动监听 案例 滚动监听插件可以根据滚动条的位置自动更新所对应的导航标记.Bootstrap中文网左侧就是一个滚动监听的例子. 代码段: [html] view plaincopy <nav id="navbar-example2" class="navbar navbar-default navbar-static" role="navigation"> <div class="navbar-header&quo

Android对ScrollView滚动监听,实现美团、大众点评的购买悬浮效果

我之前写了一篇关于美团网,大众点评的购买框效果的文章Android对ScrollView滚动监听,实现美团.大众点评的购买悬浮效果,我自己感觉效果并不是很好,如果快速滑动界面,显示悬浮框的时候会出现一卡的现象,有些朋友说有时候会出现两个布局的情况,特别是对ScrollView滚动的Y值得监听,我还使用了Handler来获取,还有朋友给我介绍了Scrolling Tricks这个东西,我下载试了下,确实美团网,大众点评的购买框用的是这种效果,但是Scrolling Tricks只能在API11以上