当我想通过 javascript 代码滚动网站时,设置 .scrollTop
属性的正确元素是什么?
是 window
、document
、document.body
还是 html
元素?
jQuery 是否有一些技巧来检测滚动主视口(viewport)并统一调用的意图?在我看来,有时 $(window).scroolTop(value)
有效,但有时却无效。
最佳答案
通常,<html>
元素,又名 document.documentElement
.但是,如果您使用的是 Quirks 模式,<body>
( document.body
) 代表视口(viewport)。 (HTML/CSS 没有明确声明/要求这一点,但这是所有现代浏览器的工作方式。)
你永远不想进入怪癖模式,但如果你正在编写一个脚本以包含在其他人的页面上,你将不得不处理它:
var viewport= document.compatMode==='BackCompat'? document.body : document.documentElement;
// do something with viewport.scrollTop
jQuery 使用 window.scrollTo()
而不是直接设置滚动属性。无论哪种方式在实践中都几乎相同。你可能会争辩说使用 scrollTo
更简洁一些,因为它避免依赖由特定元素表示的视口(viewport),但是 jQuery 仍然必须使用 scrollTop
/scrollLeft
无论如何都要读取“其他”属性的当前值,所以没什么大不了的。您可以使用 pageXOffset
/pageYOffset
在不依赖特定元素的情况下读取当前滚动位置,但并非所有地方都支持它,因此您仍然必须回退到 scrollTop
方法。
遗憾的是,这些属性/方法在过去都没有标准化。 CSSOM Views最终解决这个问题。
关于javascript - 更正主视口(viewport)的 HTML 滚动元素 (+jQuery),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4375615/