location.hash的不一樣用法
除了可以當做錨點,定位到同name位置,location.hash還有兩個用法。
平時開發都會用得到。
一:使js事件在瀏覽器中產生歷史記錄。
舉個栗子:
我們在JS裏面改變了頁面的數據、樣式等,比如我們首先執行了JS函數A,把頁面由白色變成了紅色,在執行了JS函數B,把頁面由紅色變成了黑色,這個時候我想退回到頁面為紅色的狀態,那麽該怎麽辦?如果沒有location.hash,我們只有重新載入頁面,在去觸發執行函數A,因為對於這些事件,瀏覽器是沒有歷史記錄的,“前進、後退”按鈕不能用的,這樣顯然太麻煩了,對用戶不是很友好。有了location.hash我們就有辦法了,在函數A和函數B裏面加一段代碼,location.hash=A這樣,執行到該代碼後,就相當於觸發了喵鏈接,大家都知道喵鏈接是不會讓頁面重新載入的,只是在頁面內部定位而已,所以不會造成其他壞的影響,但是細心的你會發現執行了該代碼後,“前進、後退”按鈕就可以用了,你可以從容的回退到你想要的任何一步操作了,就像你在執行函數時種下了歷史記錄一樣。 onhashchange事件就是當喵鏈接發生改變的時候觸發的。
IE 的部份,IE8 之後才有支持:「onhashchange Event」
Firefox 則是 3.6 之後才有支持:「window.onhashchange」
二:用戶使用網址直接訪問舊頁面。
首先要知道,如果在瀏覽器地址中輸入網址,發送請求,服務器是只能接受地址的,但是不帶hash值,舉個栗子:
比如在瀏覽器中輸入 :
http://fis.baidu.com/#simple
服務器接受的卻是這個:
http://fis.baidu.com
也就是說,在服務器中,是無法請求回來一個帶hash值的頁面的。
那麽這個問題,就要留在客戶端來解決,這就使用到了location.hash。
舉個栗子:
比如,我們的頁面上有三個功能:A、B、C,我們要分別給它們分配一個hash值:#A、#B、#C,在頁面初始化的時候,通過window.location.hash來判斷用戶需要訪問的頁面,然後通過javascript來調整顯示頁面。
代碼:
var hash; hash=(!window.location.hash)?"#search":window.location.hash; window.location.hash=hash; //調整地址欄地址,使前進、後退按鈕能使用 switch(hash){ case "#A"://顯示A所代表的面板 break; case "#B": //顯示B所代表的面板 break; case "#C": //顯示C所代表的面板 break; }
總結一下:
1.通過window.location.hash=hash這個語句來調整地址欄的地址,使得瀏覽器裏邊的“前進”、“後退”按鈕能正常使用(實質上欺騙了瀏覽器)。
2.根據hash值的不同來顯示不同的面板(用戶可以收藏對應的面板了)。
其實兩種用法都是一個意思,但是這樣說,可能會讓你很明白。
location.hash的不一樣用法