javascript - 在 URL 栏中按下 ENTER 时如何更正 Firefox 中的#anchor 滚动位置

标签 javascript jquery html css firefox

我在页面顶部有一个 float 菜单,因此所有 anchor 滚动位置都偏离给定值。我正在通过一个非常简单的 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,它只会进行快速的 anchor 跳转。该跳转到达了错误的位置,因为它没有被 JS 代码修复。 Chrome 不会显示此类行为,因为即使在已打开的页面上按下 ENTER,它也会重新运行 JS。

最佳答案

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

关于javascript - 在 URL 栏中按下 ENTER 时如何更正 Firefox 中的#anchor 滚动位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31235209/

相关文章:

html - 当内容较少时,页脚需要粘在底部

javascript - 通过按钮发送命令播放轨道

javascript - 通过 wss 的 Websocket ://disconnects without any errors

javascript - 单条 "chart"到 CSS(或 HTML5/SVG)中的 donut (doughnut)图表

javascript - 退出时没有过渡或动画(smoothstate.js)

javascript - 选择具有边框半径的 div 后删除框

javascript - 我怎么知道 $http 响应是否来自缓存 - Angular

jQuery Waypoints 不适用于绝对定位的 div

php - jquery post ajax 调用 session 不起作用

javascript - 在 React 中将文本分成多行