47

似乎body.scrollTop(and body.scrollLeft) 在 ES5 严格模式中已被弃用。DOMElement考虑到在其他s上使用这些属性似乎仍然可以,这是什么原因?

背景资料:

我有一个函数试图增加(或减少,如指定)scrollTop所有祖先的值element,直到其中一个实际发生变化。我想知道,为了保持对严格模式的抱怨,我是否应该body在父链向上移动时专门检查元素。

[显然body是指document.body]

4

4 回答 4

49

这是 Chrome 自己的不正确行为已被弃用,他们警告作者停止依赖它。

在标准模式或怪癖模式中,滚动视口由document.documentElement(<html><body> ) 表示。(Quirks 模式模拟 Navigator 4 和 Explorer 5 的文档呈现。)

Chrome在两种body.scrollTop模式下都使用来表示视口的滚动位置,这是错误的。听起来他们想解决这个问题,所以他们鼓励作者为标准行为编写脚本。

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

document.body.scrollTop您可以通过在控制台中执行来查看警告:

body.scrollTop在严格模式下已弃用。请documentElement.scrollTop在严格模式下使用 if 并且body.scrollTop仅在怪癖模式下使用。

于 2013-11-19T00:00:21.583 回答
22

我注意到我的代码停止在较新版本的 Chrome 上运行。我通过使用修复它window.scrollY

前:

var scrollTop = document.body.scrollTop;

现在:

var scrollTop = window.scrollY;

它现在一直有效。您可以在此处找到更多文档。

另外,我正在使用:

document.body.scrollTop = 0;

现在我将其替换为:

window.scrollTo(0, 0);
于 2018-04-06T19:11:25.173 回答
3

以下代码适用于我在所有浏览器的点击事件触发时将弹出窗口设置在正确的位置。

var scrollTop = window.scrollY; //For all browsers.
var scrollTop = document.body.scrollTop; //This works for only IE Edge specific versions
于 2020-10-06T18:45:14.303 回答
-4

scrollTop 是指元素滚动了多少。这意味着 body 不应该有一个 scrollTop 因为它从不滚动,body 有最顶部的滚动条,所以它的内容可以滚动,但不能滚动 body 本身。
本页最后一张图说明了很多:
https ://developer.mozilla.org/en-US/docs/Web/API/Element.scrollTop

于 2013-10-28T12:53:58.487 回答