jQuery each()不适用于Firefox,在webkit中工作

时间:2013-05-23 12:54:49

标签: javascript jquery

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

3 个答案:

答案 0 :(得分:3)

FireFox需要使用scrolltop设置并从html元素中读取。 其他浏览器将其存储在body元素上。

做的:

var scrollTop = $("html,body").scrollTop();

答案 1 :(得分:1)

而不是:

$("body").scrollTop();

尝试使用:

$("body,html").scrollTop();

答案 2 :(得分:0)

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