如何正确#锚滚动的位置在Firefox中,当按ENTER在URL栏

How to correct #anchor scroll location in Firefox when ENTER is pressed in URL bar

本文关键字:当按 ENTER URL Firefox 滚动 位置 何正确      更新时间:2023-09-26

我在页面顶部有一个浮动菜单,所以所有的锚滚动位置都是给定的值。我通过一个非常简单的jQuery代码在Javascript中纠正这个问题:

if (window.location.hash !== '') {
    setTimeout(function() {
        var jumpPoint = $(window.location.hash).offset().top;
        var menuHeight = $('#menu').height();
        $(document).scrollTop(jumpPoint - menuHeight);
    }, 10);
}

这在Firefox和Chrome中都能很好地工作,但是Firefox有一个我不知道如何解决的问题。

当用户点击一个链接或打开一个新选项卡时,Firefox运行JS并通过。scrolltop()来固定滚动位置。

然而,当用户在一个已经打开的页面上点击ENTER时,Firefox不会重新运行JS,它只是做一个快速的锚跳转。该跳转到达错误的位置,因为它不是由JS代码固定。Chrome不会显示这样的行为,因为即使在已经打开的页面上按ENTER键,它也会重新运行JS。

$(window).on('load hashchange', function(){
    var offset = $(window.location.hash).offset();
    if (offset) $(document).scrollTop(offset.top - $('#menu').height());
});