# 第 14 章 下拉菜單和滾動監聽插件
**學習要點:**
1.下拉菜單
2.滾動監聽
主講教師:李炎恢
本節課我們主要學習一下 Bootstrap 中的下拉菜單插件, 這個插件在以組件的形式我們已經學習過,那么現在來看看怎么和 JavaScript 交互的。
**一.下拉菜單**
常規使用中,和組件方法一樣,代碼如下:
//聲明式用法
```
<div class="dropdown">
<button class="btn btn-primary" data-toggle="dropdown"> 下拉菜單 <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="#">首頁</a></li>
<li><a href="#">產品</a></li>
<li><a href="#">資訊</a></li>
<li><a href="#">關于</a></li>
</ul>
</div>
```
聲明式用法的關鍵核心:
1.外圍容器使用 class="dropdown"包裹;
2.內部點擊按鈕事件綁定 data-toggle="dropdown";
3.菜單元素使用 class="dropdown-menu"。
//如果按鈕在容器外部,可以通過 data-target 進行綁定。
```
<button class="btn btn-primary" id="btn" data-toggle="dropdown" data-target="#dropdown">
```
在 JavaScript 調用中,沒有屬性,方法并不好用,下面介紹四個基本事件。
//下拉菜單方法,但仍然需要 data-*
```
$('#btn').dropdown();
$('#btn').dropdown('toggle');
```
下拉菜單支持 4 種事件,分別對應彈出前、彈出后、關閉前和關閉后。

//事件,其他雷同
```
$('#dropdown').on('show.bs.dropdown', function() {
alert('在調用 show 方法時立即觸發!');
});
```
**二.滾動監聽**
滾動監聽插件是用來根據滾動條所處在的位置自動更新導航項目, 顯示導航項目高亮顯示。
//基本實例
```
<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>
```
這里有兩個重要的屬性,如下圖:

PS:在一個菜單和一個容易的時候,data-target 不設置也可以穩定實現滾動監聽高亮。但多個導航時,你不關聯其中一個,會導致錯誤,所以,一般要加上。
如果使用 JavaScript 腳本方式, 可以去掉 data-*, 使用腳本屬性定義: offset、 spy和 target。具體方法如下:
//使用腳本方式定義屬性
```
$('#content').scrollspy({
offset : 0,
target : '#nav',
});
```
滾動監聽還有一個切換到新條目的事件。

//事件綁定在導航上
```
$('#nav').on('activate.bs.scrollspy', function() {
alert('新條目被激活后觸發此事件!');
});
```
滾動監聽還有一個更新容器 DOM 的方法。

//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-*聲明式。
- 介紹
- HTML/CSS 教程
- 第 1 章 HTML5 概述
- 第 2 章 基本格式
- 第 3 章 文本元素
- 第 4 章 超鏈接和路徑
- 第 5 章 分組元素
- 第 6 章 表格元素
- 第 7 章 文檔元素
- 第 8 章 嵌入元素
- 第 9 章 音頻和視頻
- 第 10 章 表單元素[上]
- 第 10 章 表單元素[中]
- 第 10 章 表單元素[下]
- 第 11 章 全局屬性和其他
- 第 12 章 CSS 入門
- 第 13 章 CSS 選擇器[上]
- 第 14 章 CSS 顏色與度量單位
- 第 15 章 CSS 文本樣式[上]
- 第 15 章 CSS 文本樣式[下]
- 第 16 章 CSS 盒模型[上]
- 第 16 章 CSS 盒模型[下]
- 第 17 章 CSS 邊框與背景[上]
- 第 17 章 CSS 邊框與背景[下]
- 第 18 章 CSS 表格與列表
- 第 19 章 CSS 其他樣式
- 第 20 章 CSS3 前綴和 rem
- 第 21 章 CSS3 文本效果
- 第 21 章 CSS3 文本效果
- 第 23 章 CSS3 邊框圖片效果
- 第 24 章 CSS3 變形效果[下]
- 第 25 章 CSS3 過渡效果
- 第 26 章 CSS3 動畫效果
- 第 27 章 CSS 傳統布局[上]
- 第 27 章 CSS 傳統布局[下]
- 第 28 章 CSS3 多列布局
- 第 29 章 CSS3 彈性伸縮布局[上]
- 第 29 章 CSS3 彈性伸縮布局[中]
- 第 29 章 CSS3 彈性伸縮布局[下]
- 第 30 章 使用 Emmet 插件
- Bootstrap 教程
- 第 1 章 Bootstrap 介紹
- 第 2 章 排版樣式
- 第 3 章 表格和按鈕
- 第 4 章 表單和圖片
- 第 5 章 柵格系統
- 第 6 章 輔組類和響應式工具
- 第 7 章 圖標菜單按鈕組件
- 第 8 章 輸入框和導航組件
- 第 9 章 路徑分頁標簽和徽章組件
- 第 10 章 巨幕頁頭縮略圖和警告框組件
- 第 11 章 進度條媒體對象和 Well 組件
- 第 12 章 列表組面板和嵌入組件
- 第 13 章 模態框插件
- 第 14 章 下拉菜單和滾動監聽插件
- 第 15 章 標簽頁和工具提示插件
- 第 16 章 彈出框和警告框插件
- 第 17 章 按鈕和折疊插件
- 第 18 章 輪播插件
- 第 19 章 附加導航插件
- 第 20 章 項目實戰--響應式導航[1]
- 第 20 章 項目實戰--響應式輪播圖[2]
- 第 20 章 項目實戰--首頁內容介紹[上][3]
- 第 20 章 項目實戰--首頁內容介紹[下][4]
- 第 20 章 項目實戰--資訊內容[5,6]
- 第 20 章 項目實戰--案例和關于[7]
- javaScript 教程
- javascript快速入門1--JavaScript前世今生,HelloWorld與開發環境
- javascript快速入門2--變量,小學生數學與簡單的交互
- javascript快速入門3--分支判斷與循環
- javascript快速入門4--函數與內置對象
- javascript快速入門5--數組與對象
- javascript快速入門6--Script標簽與訪問HTML頁面
- javascript快速入門7--ECMAScript語法基礎
- javascript快速入門8--值,類型與類型轉換
- javascript快速入門9--引用類型
- javascript快速入門10--運算符,語句
- javascript快速入門11--正則表達式
- javascript快速入門12--函數式與面向對象
- javascript快速入門13--BOM——瀏覽器對象模型(Browser Object Model)
- javascript快速入門14--DOM基礎
- javascript快速入門15--節點
- javascript快速入門15--表單
- javascript快速入門16--表格
- javascript快速入門17--事件
- javascript快速入門18--樣式
- javascript快速入門19--定位
- javascript快速入門20--Cookie
- javascript快速入門21--DOM總結
- javascript快速入門22--Ajax簡介
- javascript快速入門23--XHR—XMLHttpRequest對象
- javascript快速入門24--XML基礎
- javascript快速入門25--瀏覽器中的XML
- javascript快速入門26--XPath
- javascript快速入門27--XSLT基礎
- PHP 教程
- 第一章 如何加載運行已發布的PHP項目
- 第二章 PHP基礎
- 第三章 操作符與控制結構
- 第四章 數學運算
- 第五章 數組
- 第六章 目錄與文件
- 第七章 自定義函數
- 第八章 字符串處理
- 第九章 正則表達式
- 第十章 日期與時間
- 第十一章 表單與驗證
- 第十二章 會話控制
- 第十三章 上傳文件
- 第十四章 處理圖像
- 第十五章 MySQL 數據庫
- 第十六章 PHP 操作MySQL
- 第十七章 面向對象基礎
- 第十八章 面向對象的特性
- 第十九章 面向對象的工具