大多數Web開發人員很可能很熟悉使用錨鏈接跳轉到的頁面部分的解決方案。你可以設置一個特定的name屬性的錨鏈接,並使用href值作為哈希符號來跳過頁面。這種效果當需要列出很長的數據集時,是非常實用的,比方說一個FAQ頁面,一問一答的形式經常采用這樣的效果,然而頁面跳轉對於游客來說有時候並不是好友好,因為他一點擊直接跳轉,陌生的游客對此可能感到困惑,不知道當前的數據跑那里去了,
在本教程中,我將探討一個解決方案,創建一個簡單的頁面索引,並采用錨點鏈接在頁面上。"跳轉"動作進行動畫處理,向下滾動到達這個鏈接的容器。(完美兼容IE6,7,8)
布局
首先是基本的index.html頁面,我加入了一個典型的HTML5文檔類型。styles.css為我們的頁面樣式表,indexscroller.js自定義的jQuery代碼。
使用jquery代碼別忘記引入谷歌jquery庫,舊的瀏覽器不支持HTML5的html5shiv trunk 庫的副本。在主體部分我使用的是定制的谷歌Webfont字體,以及與一些藝術CSS3效果。
1 <!doctype html> 2 <html lang="en-US"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> 5 <title>jQuery Alphabetical Scrolling Links Index</title> 6 <meta name="author" content="Jake Rocheleau"> 7 <link rel="shortcut icon" href="http://spyrestudios.com/favicon.ico"> 8 <link rel="icon" href="http://spyrestudios.com/favicon.ico"> 9 <link rel="stylesheet" type="text/css" href="styles.css"> 10 <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Milonga"> 11 <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 12 <script type="text/javascript" charset="utf-8" src="indexscroller.js"></script> 13 <!--[if lt IE 9]> 14 <script type="text/javascript" src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> 15 <![endif]--> 16 </head>
主體內容
錨鏈接的href值在頁面上按字母順序列出的目標索引。從indexa到#indexg都針對其他頁面上錨鏈接上面的匹配的name屬性的值。
1 <div id="w"> 2 <H1>動態jQuery的滾動鏈接索引</ h1> 3 4 <div id="container"> 5 <nav id="links"> 6 <ul class="clearfix"> 7 <li class="label">快速鏈接:</ P> 8 <LI> <A href="#indexa"> A </ A> </ P> 9 <LI> <A href="#indexb"> B </ A> </ P> 10 <LI> <A href="#indexc"> C </ A> </ P> 11 <LI> <A href="#indexd"> D </ A> </ P> 12 <LI> <A href="#indexe"> E </ A> </ P> 13 <LI> <A href="#indexf"> F </ A> </ P> 14 <LI> <A href="#indexg"> G </ A> </ P> 15 </ ul> 16 </div>
下面是name為 indexb的錨鏈接的具體滾動內容:當你點擊<LI> <A href="#indexb"> B </ A> </ P> 他就會跳轉到這個地方
1 <div class="show"> 2 <h2>Arrested Development <span class="meta"><a href="http://en.wikipedia.org/wiki/Arrested_Development_(TV_series)" target="_blank">Wikipedia</a> - <a href="http://www.imdb.com/title/tt0367279/" target="_blank">IMDB</a></span></h2> 3 <p><img src="images/arrested-development.png" alt="Arrested Development TV Show" width="570" height="280"></p> 4 </div> 5 6 <a name="indexb"></a> 7 <div class="show"> 8 <h2>The Big Bang Theory <span class="meta"><a href="http://en.wikipedia.org/wiki/The_Big_Bang_Theory" target="_blank">Wikipedia</a> - <a href="http://www.imdb.com/title/tt0898266/" target="_blank">IMDB</a></span></h2> 9 <p><img src="images/big-bang-theory.png" alt="The Big Bang Theory TV Show" width="570" height="280"></p> 10 </div>
CSS頁面樣式
一些默認的樣式表的內容。除了典型的CSS重置 我用的是CSS3陰影
1 /* 頁面主要樣式布局 */ 2 #w { width: 620px; margin: 0 auto; padding-top: 55px; } 3 4 #container { 5 padding: 14px 20px; 6 background: #fff; 7 -webkit-box-shadow: 2px 2px 1px rgba(0,0,0,0.35); 8 -moz-box-shadow: 2px 2px 1px rgba(0,0,0,0.35); 9 box-shadow: 2px 2px 1px rgba(0,0,0,0.35); 10 -webkit-border-radius: 5px; 11 -moz-border-radius: 5px; 12 border-radius: 5px; 13 }
在每個錨鏈接停止之前,在他的頂部設置一個padding-top:8px的大小。這樣,我們的滾動效果不停止在每個標題的頂部,有一些額外的空白
1 /* 具體的每個跳轉到錨鏈接的樣式DIV */ 2 #shows { display: block; } 3 4 .show { display: block; padding-top: 8px; margin-bottom: 23px; } 5 .meta { font-family: Arial, Verdana, sans-serif; color: #222; font-size: 0.8em; font-weight: bold; float: right; } 6 7 /* clearfix */ 8 .clearfix:after { content: "."; display: block; clear: both; visibility: hidden; line-height: 0; height: 0; } 9 .clearfix { display: inline-block; } 10 11 html[xmlns] .clearfix { display: block; } 12 * html .clearfix { height: 1%; }
此外,元信息包含在每個頭塊的HTML標記,以節省空間。所以,我們是浮動的內容,並使用CSS clearfix的布局結構。
jQuery的scrollTop
jQuery有命名.scrollTop()方法,使用這種技術,可以拉動當前的像素值從頁面頂部的任何其他選擇的元素。我們從列表向下滾動,准確的錨鏈接。
1 $(document).ready(function(){ 2 $('#links > ul > li > a').on('click', function(e){ 3 e.preventDefault(); 4 var anchorid = $(this.hash); 5 6 if(anchorid.length == 0) anchorid = $('a[name="' + this.hash.substr(1) + '"]'); 7 else anchorid = $('html'); 8 9 $('html, body').animate({ scrollTop: anchorid.offset().top }, 450); 10 }); 11 });
這里的indexscroller.js。它似乎沒有太多代碼,但是,讓我們看看DOM加載完成后,會發生什么情況。
#links內部鏈接錨被點擊之后,我們立即調用e.preventDefault() 。這將停止從附加到URL的頁面跳了下來瞬間的哈希值。然后使用一個新的jquery.hash屬性,我們可以確切的獲取href值后的哈希符號。因此,舉例來說,我們的第一個索引鏈接會返回值“indexa”。
使用這種新的屬性,我們可以針對相應的錨鏈接頁面上的name屬性相匹配。我們設置這個新anchorid的變量,使用anchorid.offset()可以訪問距離頂部的絕對像素。最后加入所有這些代碼到一個簡單的jQuery .animate()方法
123