監(jiān)控 url fragment變化的js代碼
更新時間:2010年04月19日 21:18:49 作者:
url 里面的 #后面的部分 可以實現(xiàn)無刷新的改變url 的值。這個特點非常有用。比如視頻網站土豆中的豆單,你進入視頻列表以后,點擊播放某個視頻。
當然,頁面最好不要刷新,但是,拷貝一下瀏覽器的鏈接,又希望是下次能定位到你播發(fā)的那個視頻。方法很簡單,改變一下 url 的 fragment 就可以了。
監(jiān)聽fragment 的變化是這類編程的核心。在主流的瀏覽器(IE firefox)里面 都有一個 onhashchange 的事件監(jiān)聽 fragment 的變化。
但是,他們的行為有些差異。在IE8 以前的 IE版本里面,當 window.location 對象迅速變化的情況下,onhashchange 不會觸發(fā),非常奇怪的bug。
下面我寫的 onhashchange 事件 沒有瀏覽器的差異。并且加入了一個功能,頁面初始化的時候,如果 url 中 有 fragment ,也觸發(fā)一下
onhashchange 事件。
function addFragmentChangeEvent(callback)
{
var source = document.URL;
var url = source.split("#")[0];
if (window.location.hash)
{
var base_hash = "#____base____hash____";//改變hash,使得頁面初始化的時候觸發(fā)一下事件函數(shù)。
window.location = url + base_hash;
}
var prevHash = window.location.hash;
window.setInterval(
function()
{
if (window.location.hash != prevHash)
{
prevHash = window.location.hash;
callback(prevHash);
}
}, 100);
if (window.location.hash)
{
window.location = source;
}
}
其實這個技巧是js 中間常用的技巧,模擬一個事件的作用。
監(jiān)聽fragment 的變化是這類編程的核心。在主流的瀏覽器(IE firefox)里面 都有一個 onhashchange 的事件監(jiān)聽 fragment 的變化。
但是,他們的行為有些差異。在IE8 以前的 IE版本里面,當 window.location 對象迅速變化的情況下,onhashchange 不會觸發(fā),非常奇怪的bug。
下面我寫的 onhashchange 事件 沒有瀏覽器的差異。并且加入了一個功能,頁面初始化的時候,如果 url 中 有 fragment ,也觸發(fā)一下
onhashchange 事件。
復制代碼 代碼如下:
function addFragmentChangeEvent(callback)
{
var source = document.URL;
var url = source.split("#")[0];
if (window.location.hash)
{
var base_hash = "#____base____hash____";//改變hash,使得頁面初始化的時候觸發(fā)一下事件函數(shù)。
window.location = url + base_hash;
}
var prevHash = window.location.hash;
window.setInterval(
function()
{
if (window.location.hash != prevHash)
{
prevHash = window.location.hash;
callback(prevHash);
}
}, 100);
if (window.location.hash)
{
window.location = source;
}
}
其實這個技巧是js 中間常用的技巧,模擬一個事件的作用。
您可能感興趣的文章:
- 關于angular js_$watch監(jiān)控屬性和對象詳解
- 使用javascript實現(xiàn)監(jiān)控視頻播放并打印日志
- JS監(jiān)控關閉瀏覽器操作的實例詳解
- JS實現(xiàn)監(jiān)控微信小程序的原理
- 使用Javascript監(jiān)控前端相關數(shù)據的代碼
- js實時監(jiān)控文本框輸入字數(shù)的實例代碼
- 使用Object.defineProperty實現(xiàn)簡單的js雙向綁定
- js中Object.defineProperty()方法的不詳解
- JavaScript的Object.defineProperty詳解
- JS使用對象的defineProperty進行變量監(jiān)控操作示例
相關文章
js實現(xiàn)把時間戳轉換為yyyy-MM-dd hh:mm 格式(es6語法)
下面小編就為大家分享一篇js實現(xiàn)把時間戳轉換為yyyy-MM-dd hh:mm 格式(es6語法),具有很的參考價值,希望對大家有所幫助2017-12-12layui使用button按鈕 點擊出現(xiàn)彈層 彈層中加載表單的實例
今天小編就為大家分享一篇layui使用button按鈕 點擊出現(xiàn)彈層 彈層中加載表單的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09JavaScript實現(xiàn)淘寶網圖片的局部放大功能
這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)淘寶網圖片的局部放大功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05基于BootStrap Metronic開發(fā)框架經驗小結【九】實現(xiàn)Web頁面內容的打印預覽和保存操作
本篇文章主要介紹如何實現(xiàn)Web頁面內容的打印預覽和保存操作的相關知識,感興趣的朋友一起學習吧2016-05-05