2013-10-28 57 views
28

看起来body.scrollTop(和body.scrollLeft)在ES5严格模式下不推荐使用。这是什么原因,因为在其他DOMElement s上使用这些属性似乎还可以吗?为什么不推荐使用body.scrollTop?

背景资料:

我有试图增加一个函数(或减少,如指定)一个element的所有祖先的scrollTop值,直到这些实际变化之一。我想知道,为了保持严格模式的投诉,我应该专门检查对抗body元素,因为父母的链条向上移动。

[显然,bodydocument.body]

+3

什么让你认为严格模​​式对此有什么影响? ECMAScript规范与浏览器在浏览器环境中可用的主机对象(可能使用JavaScript的几种环境之一)无关,严格模式无法更改它们。 –

+0

哦,我不知道。我正在开发一个Chrome扩展,并开始在控制台上关于body.scrollTop被弃用的严格模式(我指定'“use strict”;'')指出一堆警告。目前这种情况只发生在Chrome Canary上,但我认为即将在稳定的Chrome版本上也会发生。 –

+0

@ T.J.Crowder有没有什么办法可以避免'console'上的警告信息(我在最近的评论中提到过)?另外,如果ECMAScript规范与此无关,为什么浏览器首先警告它? –

回答

34

它的使用已过时的Chrome本身不正确的行为,而且他们警告作者停止依赖于它。

scrolling viewport is represented by document.documentElement (<html>) in standards mode or <body> in quirks mode。 (Quirks mode模拟导航4和浏览器5的文档渲染)

Chrome使用body.scrollTop来表示两个模式,这是错误的视口的滚动位置。这听起来像they want to fix this,所以他们鼓励作者为标准行为编写脚本。

我不认为你需要改变你的代码。在标准模式下使用body.scrollTop没有任何问题,只要您知道它仅代表body的滚动位置(通常为0,除非您已给出body滚动框)。

您可以通过控制台执行document.body.scrollTop看到警告:

body.scrollTop严格模式已经过时了。如果处于严格模式,请使用documentElement.scrollTop,如果处于怪癖模式,请使用body.scrollTop

-5

scrollTop的是指该元素是多少滚动。这意味着主体不应该有一个scrollTop,因为它从来没有滚动,主体有最顶端的滚动条,所以它的内容可以滚动,但不是身体本身。
此页面上的最后一张照片解释了很多:
https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollTop

+1

如果在控制台上查看,“document.body.srollTop”的值等于页面从顶部滚动的像素数。 –

+0

请参阅:http://jsbin.com/ohUdani/1([source](http://jsbin.com/ohUdani/1/edit)) –

+1

我的歉意,我一直都明白身体不应该有scrollTop。显然我错了。 –

相关问题