看起来在ES5严格模式下,body.scrollTop
(以及body.scrollLeft
)已经被弃用。鉴于在其他DOMElement
上仍然可以使用这些属性,这是什么原因?
背景信息:
我有一个函数,试图增加(或减少,根据指定)element
的所有祖先元素的scrollTop
值,直到其中一个实际改变。我想知道,为了保持与严格模式的兼容性,是否应该在向上移动父链时特别检查body
元素。
【显然,body
指的是document.body
】
看起来在ES5严格模式下,body.scrollTop
(以及body.scrollLeft
)已经被弃用。鉴于在其他DOMElement
上仍然可以使用这些属性,这是什么原因?
背景信息:
我有一个函数,试图增加(或减少,根据指定)element
的所有祖先元素的scrollTop
值,直到其中一个实际改变。我想知道,为了保持与严格模式的兼容性,是否应该在向上移动父链时特别检查body
元素。
【显然,body
指的是document.body
】
Chrome自己的不正确行为被弃用了,并且他们正在警告作者停止依赖它。
滚动视口由标准模式下的document.documentElement
(<html>
)或怪异模式下的<body>
表示。(怪异模式模拟Navigator 4和Explorer 5的文档呈现。)
Chrome在两种模式下都使用body.scrollTop
来表示视口的滚动位置,这是错误的。听起来他们想要修复这个问题,所以他们鼓励作者编写符合标准的脚本。
body.scrollTop
没有问题,只要您理解它仅表示body
的滚动位置(通常是0
,除非您已经给body
添加了一个滚动框)。document.body.scrollTop
来查看警告:
在严格模式中,
body.scrollTop
已被弃用,请在严格模式下使用documentElement.scrollTop
,在怪异模式下使用body.scrollTop
。
我注意到我的代码在较新版本的Chrome上停止工作。我通过使用window.scrollY
来修复它。
之前:
var scrollTop = document.body.scrollTop;
现在:
var scrollTop = window.scrollY;
现在它一直有效。您可以在此处找到更多文档。
另外,我曾经使用:
document.body.scrollTop = 0;
现在我已经用新的东西替换了它:
window.scrollTo(0, 0);
window.pageYOffset
。https://caniuse.com/#search=scrollY - cheshireoctopusvar scrollTop = window.scrollY; //For all browsers.
var scrollTop = document.body.scrollTop; //This works for only IE Edge specific versions
scrollTop 指的是元素滚动的距离。这意味着 body 不应该有 scrollTop,因为它从未被滚动过,body 有最顶部的滚动条,所以它的内容可以被滚动但 body 本身不会被滚动。
这个页面上的最后一张图片解释了很多:
https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollTop
document.body.scrollTop
的值等于页面从顶部滚动了多少像素。 - Himanshu Pbody.scrollTop
=== 0
。 - sam
console
警告信息?此外,如果ECMAScript规范与此无关,为什么浏览器首先会发出警告呢? - Himanshu P