【发布时间】:2012-03-29 15:59:54
【问题描述】:
我正在使用 jQuery 通过本地锚点及其 onclick 属性来切换网页上内容的可见性。最好防止页面滚动到锚点,以保持位于内容顶部的部分菜单“始终”可见。 jQuery 的 event.preventDefault() 似乎可以解决问题,但我意识到浏览器历史记录也被禁用了。而且锚点也不会显示在url中,这不是我喜欢的。
有没有办法只部分禁用默认行为,比如滚动?
【问题讨论】:
标签: jquery
我正在使用 jQuery 通过本地锚点及其 onclick 属性来切换网页上内容的可见性。最好防止页面滚动到锚点,以保持位于内容顶部的部分菜单“始终”可见。 jQuery 的 event.preventDefault() 似乎可以解决问题,但我意识到浏览器历史记录也被禁用了。而且锚点也不会显示在url中,这不是我喜欢的。
有没有办法只部分禁用默认行为,比如滚动?
【问题讨论】:
标签: jquery
我建议坚持使用 preventDefault 来抑制滚动,并使用 native history object's pushState/replaceState method(如果可用)和/或 balupton's history.js polyfill 来获取本机功能。
function anchorClick(e){
e.preventDefault();
//do stuff
history.pushState(null/*state object*/, null/*title*/, document.location + $(e.target).attr('id'));
}
例子:
【讨论】:
这有点难看,但这是我能想到的最好的事情:
$(document).delegate("a[href^=\\#]", "click", function() {
var $body = $("body"),
left = $body.scrollLeft(),
top = $body.scrollTop();
setTimeout(function() {
window.scrollTo(left, top);
}, 0);
});
【讨论】: