0

我有一个函数可以检测用户当前所在的单页站点的部分,并根据传递给它的变量滚动到下一部分或上一部分。这在 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;
            }
        });
    }
}
4

3 回答 3

3

FireFox 需要设置滚动顶部并从 html 元素中读取。其他浏览器将其存储在 body 元素上。

做:

var scrollTop = $("html,body").scrollTop();
于 2013-05-23T13:00:17.143 回答
1

代替:

$("body").scrollTop();

尝试使用:

$("body,html").scrollTop();
于 2013-05-23T12:58:39.987 回答
0

尝试在 $('body,html') 中更改 $('body') 。它应该工作

于 2013-05-23T13:01:48.057 回答