1
我不知道我該怎麼稱呼這個問題......這個問題的標題根本沒有任何意義,我知道!hashchange函數的異常 - 瀏覽器歷史記錄回來?
以下情況:我有單頁佈局,用戶向下滾動。我有部分.layer
,它們在視口內時應將地址欄中的散列值更改爲其id
。所以例如該.layer#one
是視內部在地址欄的網址看起來像這樣www.whatever.com/#!/one
$(window).scroll(function() {
hash = $('.layer:in-viewport').attr('id');
top.location.hash = "!/" + hash;
});
這只是正常和酷似我想它。我使用!/
的語法的原因是,如果我只是簡單地將位置設置爲hash
,那麼只有滾動行爲會有問題,因爲瀏覽器試圖堅持哈希位置。
現在的問題是,我希望能夠使瀏覽器歷史記錄返回按鈕工作! 這通常是用自帶的jQuery的,像這樣的hashchange
功能相當簡單...
$(window).bind('hashchange', function(event) {
//query the hash in the addressbar and jump to its position on the site
});
我有這個唯一的問題是,如果在滾動散列改變hashchange功能也將被觸發。所以它會再次跳轉或堅持到瀏覽器中的當前位置。任何想法我怎麼能解決這個問題?我可以在滾動的時候解開hashchange,對吧?但這是最好的解決方案嗎?
嗯,謝謝你的這種做法。看起來非常好,但我似乎無法使它工作。我將我的代碼發佈到jsfiddle,但演示當然不適用於jsfiddle網站。 http://jsfiddle.net/JDpqs/ – matt 2012-01-04 21:33:31
你是否包含這個來獲取:in-viewport? http://goo.gl/apfUa – glortho 2012-01-05 02:22:21
順便說一句,如果你可以負擔得起使用pushState/onpopstate,它會很好。 – glortho 2012-01-05 02:38:04