簡體   English   中英

如何在hashchange之前執行代碼?

[英]How do I execute code before a hashchange?

基本上,我想構造一個beforehashchange事件。 我想在hashchange事件影響頁面之前執行代碼(即:滾動到目標)。

我所知道的唯一可以更改哈希(並導致hashchange事件)的事情是:

  • 單擊<a href="#foo"> ,在這種情況下,我可以捕獲click事件,並檢查到哈希的鏈接。
  • 手動更改URL欄中的哈希,我可能會忽略(除非有人知道在觸發hashchange之前可以檢測到它的hashchange ?)

還有其他方法可以觸發hashchange嗎?

我想知道同樣的事情,因為我想在觸發hashchange事件之前訪問滾動位置。

一種解決方案是使用scroll事件存儲滾動位置,然后在hashchangehashchange做出響應。 例如,要將滾動位置重置為單擊錨點之前的位置,可以執行以下操作:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM