2009-09-05 43 views
5

我有一個帶有兩個選項卡的頁面,我希望能夠使用Javascript進行切換,還可以在用於書籤/鏈接的URL中設置錨點(例如page.html#tab1)。激活URL定位但不滾動到它?

默認情況下,標籤內容分爲兩個div,一個在另一個之下,錨標籤將滾動到正確的一個,禁用JS。

啓用JS後,將應用CSS類以使它們充當製表符。每個選項卡鏈接到每個錨點,但當您單擊切換選項卡時,頁面會滾動到選項卡。如果我從onclick函數返回false,那麼URL不會更改爲包含錨點。

如何使瀏覽器URL更改爲page.html#tab1但不滾動到#tab1

回答

5

我已經玩了一段時間,因爲我最初不相信你(我用jQuery history plugin得到類似的行爲)。

我很難過。我不認爲你可以。作爲解決方法,可能會做什麼是use javascript to set the hash to something DIFFERENT from what is actually on the page。然後在加載時使用JavaScript讀取散列並填充正確的內容。 I do this on my site。所以在這種情況下,沒有javascript的用戶將被滾動,帶有javascript的用戶將保留歷史鏈,並且只有當人們沒有發送鏈接到人(或反之亦然)時纔會變得古怪。

+0

這是有效的,我剛發現這就是validator.w3.org所做的。最後,我決定取消在非JS瀏覽器中將錨點跳轉到正確的位置,因爲兩個div不是很高,並且正如你所說的,來自支持JS的用戶對非JS用戶的鏈接會停止它的工作。 – DisgruntledGoat 2009-09-07 00:50:21

-1
window.location.hash = 'tab1'; 

可能工作。

+1

不,它將不會滾動到錨點(除了在某些情況下在Safari中,由於它支持破壞location.hash)。 – andynormancx 2009-09-05 23:35:14

0

你可以有一些Javascript改變錨點名稱,設置window.location.hash,然後更改錨點名稱回來?

(我已經證實,andynormancx是正確的,並且設置window.location.hash滾動視圖,但我懶得測試是否在window.location.hash的DOM中創建錨點也是滾動。)

0
var Namespace = { 
    var timer, scroll; 
} 

// Onclick 
Namespace.scroll = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop; 
Namespace.timer = setInterval(function() { scrollTo(0, Namespace.scroll) }, 100); 
location.hash = this.href; 
clearInterval(Namespace.timer); 
1

快速黑客:

var thehash = e.target.hash; 
$(thehash).prop('id',thehash.substr(1)+'-noscroll'); 
window.location.hash = e.target.hash; 
$(thehash+'-noscroll').prop('id',thehash.substr(1));  

這改變了HTML元素的ID前和更改URL的哈希值後。適用於我,但不妨破壞一些東西。這可以防止瀏覽器在哈希更改上滾動,因爲沒有包含該ID的html元素。

+0

這對我有用(只是半心半意地期待它)。肯定有一個類似黑客的質量,但迄今爲止還沒有看到任何問題。 – 2014-03-07 17:41:32