2013-07-16 34 views
2

我有一個疑問:是否有可能禁用瀏覽器默認操作的鏈接,如http://example.com/page.html#part-123打開頁面頂部,即使有#anchor降低網頁中的網址

我不是在談論使用錨標籤(123)禁止click事件event.preventDefault()

我所試圖做的事: 有TOC在網頁的開頭名稱的鏈接(#兼職)以頁面的不同部分。

$("a.namedLink").click(function(event) { 
    event.preventDefault(); 

    //and do whatever I want to, like animated scroll then moving the dock-able header using jQuery Affix plugin 
}); 

但是,如果有人複製鏈接或直接使用URL本身(http://example.com/page.html#part-123),上面的代碼將無法工作,因爲沒有被點擊打開它:我可以很容易地在每條鏈路上使用禁用的單擊事件。

我檢查的幾個例子,但是,他們都談論同一個頁面,#點擊事件,這樣的#1線:Scroll to a div using jquery及其他:

http://webdeveloperswall.com/javascript/scrolling-to-different-areas-on-same-page http://css-plus.com/2010/11/create-a-scrolling-anchor-link-with-jquery/

請讓我知道如果我們可以做到這一點,更重要的是,如果我們應該做到這一點。

感謝

+0

也許綁定的東西到頁面加載事件和檢查網址的散列? – melancia

+0

如果您不想讓窗口滾動,請從標記中查找並移除id =「part-123」'。 – Pavlo

回答

2

可以使用滾動到錨點:

$(document).scrollTo("a[name='namedLink']"); 

您還可以檢查在頁面加載哈希的位置,如果用戶直接點擊的頁面與哈希:

$(function() { 
    var hash = window.location.hash.substring(1, window.location.hash.length); 
    if(hash != "") { 
    $(document).scrollTo("a[name='"+hash+"']"); 
    } 
}); 

你應該嗎?這完全取決於你。這就像重新發明輪子,讓它變成紅色,即使不是每個人都喜歡紅色。

正如所指出的,非常有用的scrollTo()方法實際上是一個插件,並沒有內置到jQuery中。它可以在這裏找到:http://demos.flesler.com/jquery/scrollTo/

+1

我認爲'scrollTo'是一個獨立的插件,不包含jQuery。如果是這樣,你應該提到這一點。 – Pavlo

+0

@PavloMykhalov好的一點,更新的答案反映這 – CodingIntrigue

+0

謝謝@ Blade0rz,讓我試試你的建議,但我認爲http://flesler.com/jquery/localScroll/#section5c與我有點接近需要。 – Ravish

0

你可以這樣做:

$(function() { 
    window.scrollTo(0,0); 
}); 

,使用戶返回到頂部的頁面加載後。然而,這可能意味着頁面會跳轉兩次。