我修改了pretty common jQuery smooth-scroll method以更好地满足我的需要 - 一个滚动到锚点的功能:
function scrollToAnchor(id, offset) {
target = $(id);
$('html, body').stop().animate({
'scrollTop': target.offset().top + offset}, 900, 'swing', function () {
window.location = id;
});
}
我有offset
参数来说明顶部的固定导航窗格。我在scrollToAnchor
的每次调用时都将偏移设置为-100,这样它可以减少100个像素(这样可以显示内容,而不会使固定的导航窗格隐藏任何内容)。
我的问题出现在window.location = id;
上。这会将URL设置为包含锚点,但由于这个原因,它会滚动到div的顶部(这会隐藏我的偏移量试图阻止的100个像素的内容)。我无法使用event.preventDefault()
,因为我没有任何事件参数。设置位置时有没有办法防止窗口滚动?
答案 0 :(得分:0)
正如您所指出的,浏览器默认行为是滚动到您在URL中添加的锚指定的元素。 如果您在滚动之前更改了位置会怎样?
否则,您可以使用window.history.replaceState方法,该方法应修改URL而不滚动。 但请注意,所有浏览器都支持 。