1. 程式人生 > >JS如何實現在頁面上快速定位(錨點跳轉問題)

JS如何實現在頁面上快速定位(錨點跳轉問題)

本文介紹了JS如何實現在頁面上快速定位(錨點跳轉問題),分享給大家,具體如下:

1. 錨點跳轉簡介

錨點其實就是可以讓頁面定位到某個位置上的點。在高度較高的頁面中經常見到。

錨點跳轉有兩種形式:

  • a標籤 + name / href 屬性
  • 使用標籤的id屬性

在html 4.0以前,只有使用 <a> 標籤的 name 屬性才能建立片段識別符號。id 屬性的出現,使所有 HTML 或 XHTML 元素都可以是片段識別符號。這是因為 id 識別符號幾乎可以用在所有的標籤中。<a> 標籤為了能夠和以前的版本相相容而保留了 name 屬性,同時也可以使用 id 屬性。這些屬性可以相互交換使用,可以把 id 屬性看作是 name 屬性的升級版本。name 和 id 屬性都可以與 href 屬性結合起來使用,這樣一個 <a> 標籤就可以同時作為超連結和片段識別符號使用。

但是這種方法使用了一個空標籤,而且有時候會出現錨點失效。所以建議採用id來繫結錨點,程式碼如下:

<a href="#abc">點選跳轉</a>
......
<div id="abc">將要跳轉到這裡</div>

2. 含錨點跳轉的URL地址

window.location.hash

【1】關於#

在頁面的製作中,“#”的符號很常見,並且具有通用性。基本上,其表示的含義是id選擇符。同樣的,在頁面的URL中,#也可以理解為id選擇符之意,也就是頁面跳轉到含URL指向的id標籤處。
例如輸入一個地址http://www.jb51.net/view/121414.htm?pf=1#3

這個地址中末尾有個'#',這個就相當於告訴瀏覽器要跳轉了,#後面跟著的3表示會在http://www.jb51.net/view/121416.htm?pf=1的頁面中尋找符合#3特點的標籤並且執行跳轉。

【2】關於空錨點指向

如果URL中的#後面跟隨的字元id在文中找不到,就會有兩種情況:如果是在當前頁面,除了URL地址變化了,其他的不會改變,頁面不會有跳轉;如果是從其他頁面跳轉過來,則頁面會在頂部顯示,'#'基本就是擺設。

【3】window.location.hash

用來獲取或設定頁面的標籤值。http://www.jb51.net/article/22656.htm?dasdsa

// html 程式碼
<a name="abc">跳轉到此處</a>

// js 程式碼
window.location.hash = "#abc";

3. Jquery下錨點的平滑跳轉。

如果讓頁面平滑滾動到一個id為box的元素處,則JQuery程式碼只要一句話,關鍵位置如下:

$('html, body').animate({scrollTop: $('#box').offset().top}, 1000) 

JS原生實現。

scrollTo() 方法可把內容滾動到指定的座標。

scrollTo(xpos,ypos);

4. IE下錨點重新整理失效及JQuery下的解決

【1】關於錨點重新整理失效

錨點重新整理失效就是指當按下重新整理鍵F5時,即使此時URL的後面就隨錨點,此錨點也是不起作用的。

【2】在Jquery中,不難實現。可以根據URL獲取錨點,從而進一步獲得對應錨點物件,然後再讓頁面的滾動高度為其距離頁面

頂部的偏移值就可以了。使得頁面無論是重新載入還是其重新整理,其後面的錨點都起作用。

$(function() {
	var url = window.location.toString();
	var id = url.split('#')[1];
	if (id) {
		var t = $('#' + id).offset().top;
		$(window).scrollTop(t);
	}
})