3 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊
有一種解決方法,可以在現(xiàn)代瀏覽器上使用歷史記錄API,而在舊版本上使用后備:
if(history.pushState) {
history.pushState(null, null, '#myhash');
}
else {
location.hash = '#myhash';
}

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊
問題是您將window.location.hash設(shè)置為元素的ID屬性。無論是否“ preventDefault()”,瀏覽器都會跳轉(zhuǎn)到該元素,這是預(yù)期的行為。
解決該問題的一種方法是為哈希值加上一個(gè)任意值,如下所示:
window.location.hash = 'panel-' + id.replace('#', '');
然后,您要做的就是檢查頁面加載時(shí)是否帶有前綴的哈希。另外,由于您現(xiàn)在可以控制哈希值,因此甚至可以平滑滾動到它。
$(function(){
var h = window.location.hash.replace('panel-', '');
if (h) {
$('#slider').scrollTo(h, 800);
}
});
如果您需要使其始終保持工作狀態(tài)(而不僅僅是在初始頁面加載時(shí)),則可以使用一個(gè)函數(shù)來監(jiān)控對哈希值的更改,并即時(shí)跳轉(zhuǎn)到正確的元素:
var foundHash;
setInterval(function() {
var h = window.location.hash.replace('panel-', '');
if (h && h !== foundHash) {
$('#slider').scrollTo(h, 800);
foundHash = h;
}
}, 100);

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊
便宜又討厭的解決方案..使用丑陋的#!樣式。
要設(shè)置它:
window.location.hash = '#!' + id;
閱讀:
id = window.location.hash.replace(/^#!/, '');
由于它與頁面不匹配并錨定或標(biāo)識,因此它不會跳轉(zhuǎn)。
添加回答
舉報(bào)