2012-01-27 85 views
9

在Chrome和Safari中,$("body").scrollTop(1000)会在预期的位置出现。jQuery scrollTop在浏览器中不一致

在IE和FF中,没有任何反应。

在IE和FF中,$(window).scrollTop(1000)工作,但他们去了不同的地方。它也可以在Chrome和Safari中使用,但它们都会到不同的地方。他们似乎高达300-500像素。

是否有任何一致的方式来设置跨浏览器的scrollTop属性,如果没有,为什么不jQuery抽象呢?

我想将它设置为动画,在Chrome和Safari中运行良好,但在其他浏览器中运行良好。

是我唯一的选择做浏览器检测? (不好的做法)还是有更好的方法?

+0

您试过使用$(document).scrollTop(“...”)吗? – epignosisx 2012-01-27 23:30:47

+0

这实际上工作。我曾尝试$('文档'),但没有。如果你回答的问题,我会给你信用。 – 2012-01-27 23:53:50

回答

11

$(jQuery.browser.webkit ? "body": "html").animate({ scrollTop: myTop }, myDur);

Webkit的浏览器(Chrome浏览器/ Safari浏览器,同时支持Mac和Win)用 “身体”,其他(FF /歌剧/ IE 7-9)使用 “HTML”

爱上浏览器检测。

+5

从1.3版开始,jQuery.browser已被弃用,并从1.9版中删除 – 2013-06-26 07:56:20

0

根据浏览器的不同,您需要将scrollTop应用于bodyhtml,但不会将其应用于两者。由于.scrollTop()适用于集中的第一元素,但.animate()适用于所有的元素,你可以这样做:

$('body, html').animate({ 
    scrollTop: 1000 
}, 'fast'); 

如果你想更改立即应用,改变速度('fast')到0。或者,您可以使用以下内容,但我更喜欢上述语法:

$('body, html').each(function() { $(this).scrollTop(1000); }); 
相关问题