多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > web前端 > htmlcss > 關于onhashchange事件

關于onhashchange事件

來源:程序員人生   發布時間:2014-05-30 14:13:15 閱讀次數:4483次

onhashchange 事件是一個新的事件,改事件在location.hash發生改變的時候觸發。FF3.6a2, IE 8, Chrome 4.0.206.1均支持該事件。該事件在ajax無刷新頁面提交中,能帶來更好的用戶體驗。我們知道,在一個ajax請求中,每次頁面更新不能更新地址欄,歷史記錄也不能記錄每次更新的痕跡,地址欄左側的“前進”和“后退”按鈕失去了原有的功能。有了Onhashchange事件,我們在ajax無刷新頁面提交的同時,可以很方便的記錄每次更新的痕跡。IE8的AJAX Navigations利用該事件放大縮小地圖,記錄用戶訪問的痕跡,可查看AJAX Map。

我這里并不用ajax提交實例來說明它如何使用,而是用一個我們經常用到的tab切換來說說它的使用方法。在傳統的tab切換中,點擊“前進”和“后退”按鈕并不能回到以前的狀態。以下是測試的html代碼:

<div class="tabBox" id="hashTab">
<ul class="tabTit">
<li><a href="#item1">item1</a></li>
<li><a href="#item2">item2</a></li>
<li><a href="#item3">item3</a></li>
<li class="last"><a href="#item4">item4</a></li>
</ul>
<div class="tabCon">
<div class="item" id="item1">
這里是第一個選項
</div>
<div class="item hide" id="item2">
這里是第二個選項
</div>
<div class="item hide" id="item3">
這里是第三個選項
</div>
<div class="item hide" id="item4">
這里是第四個選項
</div>
</div>
</div>

Css代碼不再列出,詳情可以參考示例頁。接下來我們開始構建tab切換效果的函數,利用jQuery,可以很容易的構建我們需要的函數。當然,你也可以使用jQuery自身的tab切換插件。

var current = "#item1";
var title = document.title;
function tabSwitch(obj,current){
$(".tabTit li").removeClass("current");
$(current).closest("li").addClass("current");
$(".tabCon .item").hide();
$(obj).show();
window.location.hash = obj;
document.title = title + " | " + obj.split("#")[1];
$("#currentObj").html("當前被點擊的對象為:" + obj + "");
}

上面的代碼中,變量current記錄當前被點擊的對象,title記錄頁面的title,以便每次,點擊時更新頁面的title。每次點擊時,將每次點擊的對象記錄在hash之中。至于觸發事件,不過是對比當前hash與window.location.hash,并將新的hash存儲到window.location.hash之中。

function HashChangeHandler(){
var hash = window.location.hash;
if (hash != current){
current = hash;
tabSwitch(hash,$("a[href='" + hash +"']"));
}
}

最后,在body標簽上綁定onhashchange事件:

最后,讓我們看看最終效果。

當然,onhashchange事件是一個最新的事件,IE6、IE7等并不支持該事件,如果要在這些瀏覽器中保持良好的用戶體驗,就得另辟蹊徑。 YUI’s History component 和 Really Simple History 都采用了 setInterval 的方式都采用setInterval 的方式來定時比較,待有改變時觸發。這種方法并不足取。網上的另一篇文章《Emulating onhashchange without setInterval》提到一種無需定時的跨瀏覽器解決方案,可茲借鑒。Dojo有一個hash.js也可以解決同樣的問題,可查看http://retchless.com/hash/hash.html#color=blue。 另外,jQuery.address.1.1.js插件可以很方便的讀取和修改hash,還是以上面的html代碼為基礎,在頁面中引入jQuery和jQuery.address.1.1.js。

<script src="jquery-1.3.2.min.js"></script>
<script src="js/jquery.address-1.1.js"></script>Html的tab標簽做如下修改:

<ul class="tabTit">
<li><a href="#item1" rel="address:item1">item1</a></li>
<li><a href="#item2" rel="address:item2">item2</a></li>
<li><a href="#item3" rel="address:item3">item3</a></li>
<li class="last"><a href="#item4" rel="address:item4">item4</a></li>
</ul>

Tab切換函數保持不變,添加以下代碼:

$.address.init(function(event) {
if(event.value == "/"){
$(".tabTit a:first").trigger("click");
};
}).change(function(event) {
var tab = (event.value).split("/")[1];
var selection = $('a[rel=address:' +tab + ']');
var obj = selection.attr('href');
$.address.title($.address.title().split(' | ')[0] + ' | ' + selection.text());
tabSwitch(obj,selection);
});

查看最終效果

技術的每一次發展更新總會帶來少許遺憾,這些遺憾卻給了我們更多思考的空間,在我們努力尋求解決方案的同時,更大的促進了技術的發展。Ajax雖然能實現無刷新提交頁面,但是卻破壞了用戶體驗。但是onhashchange事件的出現可以彌補剛方法的不足,提升了用戶體驗,期待其他瀏覽器能很好的支持該事件。

原文:http://www.denisdeng.com/?p=689

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 久久亚洲成人 | 国产国产成人精品久久 | 69视频最新在线观看 | 精品亚洲综合在线第一区 | 欧美.亚洲.日本一区二区三区 | 中文字幕无线码一区二区三区 | 91大片| 欧美区在线观看 | 秋霞日韩理论高清在线观看 | 久久成人免费 | 经典三级第一页 | 国产精品 第二页 | 午夜一级精品免费毛片 | 亚洲一区二区三区久久 | 2022国产精品网站在线播放 | 亚洲a级在线观看 | 91人人视频 | 米奇影院日韩免费 | 尤物网址在线观看日本 | 久久综合久久精品 | 亚洲码在线 | 国产精欧美一区二区三区 | 亚洲国产精品久久久久网站 | 国产精品嫩草影院在线看 | 满18看的毛片 | 亚欧毛片基地国产毛片基地 | 嫩草影院久久国产精品 | 精品中文字幕在线 | 国内视频精品 | 成人社区网站 | 精品国产精品a | 另类图片综合网 | 欧美亚洲777 | 亚洲精品一区二区三区五区 | 国产一级毛片国语普通话对白 | 亚洲一区免费看 | 国产免费一级高清淫曰本片 | 久久99精品久久久久久国产越南 | 久久婷婷一区二区三区 | 一区二区精品在线观看 | 国产欧美亚洲精品第3页在线 |