阻止对位置设置的默认操作

时间:2014-08-06 23:05:43

标签: javascript jquery html

我修改了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(),因为我没有任何事件参数。设置位置时有没有办法防止窗口滚动?

1 个答案:

答案 0 :(得分:0)

正如您所指出的,浏览器默认行为是滚动到您在URL中添加的锚指定的元素。 如果您在滚动之前更改了位置会怎样?

否则,您可以使用window.history.replaceState方法,该方法应修改URL而不滚动。 但请注意,所有浏览器都支持