Bootstrap 的 ScrollSpy


一、簡介

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

(完)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM