我有一个函数可以检测用户当前所在的单页网站的部分,并根据传递给它的变量滚动到下一部分或前一部分。这在Safari和Chrome中运行良好。但是,在Firefox中,无论滚动位置在何处,它都会将浏览器视为滚动0处。
function scrollToSection(dir) {
if( !$("body").hasClass("scrolling") ) {
$("body").addClass("scrolling");
var headerH = $(".page-header").outerHeight();
var scrollTop = $("body").scrollTop();
$("section").each(function() {
var sectionH = $(this).outerHeight(true);
var sectionOffset = $(this).offset();
var sectionOffsetTop = sectionOffset.top - headerH;
if( (sectionOffsetTop <= scrollTop) && (sectionOffsetTop + sectionH >= scrollTop) ) {
var prevSection = $(this).prev();
var nextSection = $(this).next();
if( dir === "up" ) {
$.scrollTo( prevSection, {
duration : 1000,
offset : {
top : -50
},
onAfter: function() {
$("body").removeClass("scrolling");
}
});
} else {
$.scrollTo( nextSection, {
duration : 1000,
offset : {
top : -50
},
onAfter: function() {
$("body").removeClass("scrolling");
}
});
}
return false;
}
});
}
}
答案 0 :(得分:3)
FireFox需要使用scrolltop设置并从html元素中读取。 其他浏览器将其存储在body元素上。
做的:
var scrollTop = $("html,body").scrollTop();
答案 1 :(得分:1)
而不是:
$("body").scrollTop();
尝试使用:
$("body,html").scrollTop();
答案 2 :(得分:0)
尝试在$('body,html')中更改$('body')。它应该工作