[英]How do I execute code before a hashchange?
基本上,我想構造一個beforehashchange
事件。 我想在hashchange
事件影響頁面之前執行代碼(即:滾動到目標)。
我所知道的唯一可以更改哈希(並導致hashchange
事件)的事情是:
<a href="#foo">
,在這種情況下,我可以捕獲click
事件,並檢查到哈希的鏈接。 hashchange
之前可以檢測到它的hashchange
?) 還有其他方法可以觸發hashchange
嗎?
我想知道同樣的事情,因為我想在觸發hashchange
事件之前訪問滾動位置。
一種解決方案是使用scroll
事件存儲滾動位置,然后在hashchange
上hashchange
做出響應。 例如,要將滾動位置重置為單擊錨點之前的位置,可以執行以下操作:
var X = 0, Y = 0;
window.addEventListener('scroll', function (e) {
X = document.body.scrollTop;
Y = document.body.scrollLeft;
});
window.addEventListener('hashchange', function (e) {
document.body.scrollTop = X;
document.body.scrollLeft = Y;
});
除了訪問滾動位置之外,我看不到您需要進行beforehashchange
事件的任何原因。
只有hashchange
事件。 要在更改哈希值之前捕獲一些信息,可以向所有鏈接標記添加諸如data-check-hash
類的屬性:
<a href="#test" data-check-hash>foo</a>
$('body').on('click', 'a[data-check-hash]', function(e) {
e.preventDefault();
var $item = $(e.currentTarget),
hashValue = $item.attr('href').slice(1);
// here goes your check code before hash change
window.location.hash = hashValue;
return false;
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.