jQuery scrollTo适用于Chrome但不适用于FF

时间:2014-08-17 02:41:36

标签: javascript jquery firefox scroll

好吧,我有一个scrollTo函数如下:

$.fn.scrollTo = function(t, d, o)
    {
        var scrollTarget = t;
        var offsetTop = (typeof(o) != 'undefined') ? o : Math.floor((window.innerHeight / 2) - 20);
        var duration = (typeof(d) != 'undefined') ? d : 10;
        var easing = 'swing';
        var scrollPane = $(this);
        var scrollY = (typeof scrollTarget == "number") ? scrollTarget : scrollTarget.offset().top + scrollPane.scrollTop() - parseInt(offsetTop);
        scrollPane.animate({scrollTop : scrollY }, parseInt(duration), easing, function()
        {
            if (typeof callback == 'function')
                callback.call(this);
        });
    }

我是通过$("body").scrollTo($obj, 10);

来称呼的

它在Chrome中完美运行,但在Firefox中没有任何反应。

scrollToscrollPane.animate都被调用,但没有任何反应。没有错误,并且所有值看起来都正确 - 它只是不滚动。

它只被召唤一次。

1 个答案:

答案 0 :(得分:2)

这是因为滚动的顶级页面元素在浏览器中不一致。某些浏览器(如Firfox)需要滚动html标记,而基于WebKit的浏览器(如Chrome)则需要滚动body元素。最简单的解决方案是将它应用于这两个元素。

$("html, body").scrollTo($obj, 10);

<强> Working Example