jQuery scrollTop inconsistent across browsers

一曲冷凌霜 提交于 2019-12-12 07:49:16

问题


In Chrome and Safari, $("body").scrollTop(1000) goes where expected.

In IE and FF, nothing happens.

In IE and FF, $(window).scrollTop(1000) works, but they go to different places. It also works in Chrome and Safari, but they both go to a different place as well. They seems to be up to 300-500 pixels off.

Is there any consistent way to set the scrollTop property that works cross browser, and if not, why doesn't jQuery abstract this?

I'd like to animate it as well, which works fine in Chrome and Safari, but not in the other browsers.

Is my only option to do browser detection? (bad practice) Or is there some better way?


回答1:


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

Webkit browsers (Chrome/Safari, both Mac and Win) use "body", others (FF/Opera/IE 7-9) use "html"

Gotta love browser detection.




回答2:


Try

$(document).scrollTop("...");



回答3:


You need to apply scrollTop to either body or html depending on the browser, but there's no harm applying it to both. Since .scrollTop() applies to the first element in the set, but .animate() applies to all elements, you can do this:

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

If you want the change to apply immediately, change the speed ('fast') to 0. Alternatively, you can use the following, but I like the above syntax better:

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


来源:https://stackoverflow.com/questions/9041406/jquery-scrolltop-inconsistent-across-browsers

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!