3 回答
TA贡献1804条经验 获得超8个赞
有一种解决方法,可以在现代浏览器上使用历史记录API,而在旧版本上使用后备:
if(history.pushState) {
history.pushState(null, null, '#myhash');
}
else {
location.hash = '#myhash';
}
TA贡献1890条经验 获得超9个赞
问题是您将window.location.hash设置为元素的ID属性。无论是否“ preventDefault()”,浏览器都会跳转到该元素,这是预期的行为。
解决该问题的一种方法是为哈希值加上一个任意值,如下所示:
window.location.hash = 'panel-' + id.replace('#', '');
然后,您要做的就是检查页面加载时是否带有前缀的哈希。另外,由于您现在可以控制哈希值,因此甚至可以平滑滚动到它。
$(function(){
var h = window.location.hash.replace('panel-', '');
if (h) {
$('#slider').scrollTo(h, 800);
}
});
如果您需要使其始终保持工作状态(而不仅仅是在初始页面加载时),则可以使用一个函数来监控对哈希值的更改,并即时跳转到正确的元素:
var foundHash;
setInterval(function() {
var h = window.location.hash.replace('panel-', '');
if (h && h !== foundHash) {
$('#slider').scrollTo(h, 800);
foundHash = h;
}
}, 100);
TA贡献1824条经验 获得超6个赞
便宜又讨厌的解决方案..使用丑陋的#!样式。
要设置它:
window.location.hash = '#!' + id;
阅读:
id = window.location.hash.replace(/^#!/, '');
由于它与页面不匹配并锚定或标识,因此它不会跳转。
添加回答
举报