Javascript 带有jQuery偏移量的scrollTop在Firefox中无法正常工作,除非出现鼠标移出

Javascript 带有jQuery偏移量的scrollTop在Firefox中无法正常工作,除非出现鼠标移出,javascript,jquery,firefox,offset,scrolltop,Javascript,Jquery,Firefox,Offset,Scrolltop,下面的scrollHash()函数旨在滚动到目标定位点,同时调整位置以反映固定菜单和所需的边距顶部 该函数在Chrome中正常工作,但只有在函数完成之前发生mouseout事件时(考虑函数的持续时间和setTimeout()),该函数才在Firefox中工作。否则,如果在整个函数执行过程中,鼠标继续悬停在Firefox中的链接上,该函数将无法完成调整位置的第二步(从offset().top中减去固定菜单的高度) 值得注意的是,这个问题在JSFIDLE+Firefox(使用相同的代码和jQuery

下面的
scrollHash()
函数旨在滚动到目标定位点,同时调整位置以反映固定菜单和所需的
边距顶部

该函数在Chrome中正常工作,但只有在函数完成之前发生
mouseout
事件时(考虑函数的
持续时间
setTimeout()
),该函数才在Firefox中工作。否则,如果在整个函数执行过程中,鼠标继续悬停在Firefox中的链接上,该函数将无法完成调整位置的第二步(从
offset().top
中减去固定菜单的高度)

值得注意的是,这个问题在JSFIDLE+Firefox(使用相同的代码和jQuery版本,1.9.1)中并不存在,我正在运行Firefox版本69.0.3(64位)。小提琴在这里可以买到:

代码片段

CSS:

JavaScript:

console.log输出

// SAME OUTPUT IN CHROME VS. FIREFOX 
var offset = $('.TargetMark').offset();
console.log( (offset.top - topHeight) );

// DIFFERING OUTPUT IN CHROME VS. FIREFOX
var $window = $(window);
$(window).on('scroll', function () {
    $topOffset = $(this).scrollTop();
    console.log($topOffset);
});

尝试将
document.getElementById('header').offsetHeight
更改为
$('#header').height()
@sugars-结果保持不变。我在Firefox和chrome上工作得很好。你是指它在JSFIDLE中运行还是在它自己的文档中运行?是的,我将它复制到一个HTML文件中并自己运行它
// SCROLL HASH FUNCTIONS //
window.onhashchange = scrollHash;
function scrollHash() {
    menuHeight = document.getElementById('header').offsetHeight;        
    $('.TargetMark').removeClass('TargetMark')
    if (window.location.hash) {            
      $(window.location.hash).addClass('TargetMark')      
        $('html, body').animate({
          scrollTop: $('.TargetMark').offset().top - menuHeight
        }, 100);
    }
}

// SET MARGIN TOP //
var headerHeight;
function setTarget() {
  headerHeight = document.getElementById('header').offsetHeight;
  headerHeight = headerHeight + "px";
  document.documentElement.style.setProperty('--topWrapper', headerHeight);
}

$(document).ready(function () {
    setTarget();
});

$(window).resize(function () {
    setTarget();
});
// SAME OUTPUT IN CHROME VS. FIREFOX 
var offset = $('.TargetMark').offset();
console.log( (offset.top - topHeight) );

// DIFFERING OUTPUT IN CHROME VS. FIREFOX
var $window = $(window);
$(window).on('scroll', function () {
    $topOffset = $(this).scrollTop();
    console.log($topOffset);
});