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);
});