我也遇到过这个问题。这就是我使用的并且有效。这不是浏览器嗅探,但对我来说这不是特别好的代码。现在可以了。
在 Opera 11 / IE 8 / FF 3.6 的 html 元素上调用 scrollTop 会返回一个大于零的数字
在 Chrome 10 / Flock 3.5 / Safari 5(适用于 Windows)中的 html 元素上调用 scrollTop 返回 0
所以只需测试一下:
如果浏览器是 Opera,则在 scrollTop 上测试大于 0 的数字,然后仅在 html 上调用 scrollTop,一个 la
var html = document.getElementsByTagName('html')[0];
var body = document.getElementsByTagName('body')[0];
$(html).animate({scrollTop:0+'px'},{'duration':1000,'easing':'swing'});
如果浏览器是 Chrome、Flock 或 Safari,那么 scrollTop 将返回 0 并且您对此进行测试,并采取相应措施:
$(html,body).animate({scrollTop:0+'px'},{'duration':1000,'easing':'swing'});
因此,您将为标准模式 FF 和 IE 设置对 html 的效果(也应涵盖怪癖。呃),并为 Chrome 和 Safari 设置正文。
在尝试滚动 html 和 body 的 Opera 中,从而导致大量怪异,scrollTop 返回一个大于 0 的数字,因此您只调用 html 并且您不会得到闪烁的废话。
所以你可以在必要时安全地使用 html 和 body,或者当浏览器是 Opera 时只使用 html。
并且不要忘记您的 preventDefault() ,否则您将不得不担心这将是另一个奇怪的闪烁。 ;)
嘿,我不是 JS 忍者,但我很努力,这对我有用,而且我现在没有时间尽可能多地调查它,所以我想我会发布这个在这里和帮助。如果我错了,我会举起双手说出来。 ;) 所以请反馈。 :D
汤姆。