2015-01-09 25 views
0

我知道這個問題是在stackoverflow上的allready,我也從這裏有我的解決方案。但是它仍然有一個小問題。單擊固定標頭的錨點時設置偏移

我有一個小的子菜單,它固定到頂部,所以當我點擊一個錨鏈接時,我想要在子菜單後的錨點。

首先我的代碼,這在大多數情況下:

function offsetSubmenu() { 
    if(location.hash.length !== 0) { 
     window.scrollTo(window.scrollX, window.scrollY - submenuHeight); 
    } 
} 
$(window).on("hashchange", function() { 
    offsetSubmenu(); 
}); 
window.setTimeout(function() { 
    offsetSubmenu(); 
}, 1); 

你看到的是加載頁面時被執行的代碼一次,每次在URL變化的哈希值。它迄今爲止工作。問題在於散列沒有改變。例如,當你點擊第一個Hashlink時,滾動,然後再次敲擊那個鏈接,哈希不會改變,所以windowscroll跳轉到沒有子菜單偏移量的錨。

clicklistener不起作用,導致$("a").click(..)在瀏覽器跳轉到錨點之前執行。

任何想法如何我可以處理錨點的偏移量,當hashtag不改變?

+1

您是否嘗試過使用'的setTimeout(offsetSubmenu,1)'的'$( 「A」)點擊(。 ...)'? (就像你第一次執行'offsetSubmenu'一樣) –

+0

@AlvaroMontoro非常好。寫在答案中,我會標記它。 – nbar

回答

0

如果在瀏覽器跳轉到錨點之前執行$("a").click(...),請在offsetMenu調用中添加一個小延遲,以便在跳轉後執行。喜歡的東西:

setTimeout(offsetSubmenu, 1) 

(如你執行offsetSubmenu在第一時間以同樣的方式)