Answers:
您可以使用element.scrollTop
和element.scrollLeft
分别获取已滚动的垂直和水平偏移。element
可document.body
如果你关心整个页面。如果需要百分比,可以将其与element.offsetHeight
和element.offsetWidth
(再次element
可能是主体)进行比较。
window.pageYOffset
,但是在IE7上无法正常工作。尝试过“” window.pageYOffset
,document.body.scrollTop
document.documentElement.scrollTop
element.scrollTop
document.body
大多数现代浏览器都没有设置滚动位置-通常document.documentElement
现在就设置滚动位置。有关Chrome的过渡,请参见bugs.chromium.org/p/chromium/issues/detail?id=157855。
我这样做是为了<div>
在Chrome上进行的。
元素.scrollTop-是由于滚动而隐藏在顶部的像素。不滚动时,其值为0。
element .scrollHeight-是整个div的像素。
元素.clientHeight-是您在浏览器中看到的像素。
var a = element.scrollTop;
将是职位。
var b = element.scrollHeight - element.clientHeight;
将是最大的价值scrollTop的。
var c = a / b;
将是滚动百分比[从0到1]。
document.getScroll = function() {
if (window.pageYOffset != undefined) {
return [pageXOffset, pageYOffset];
} else {
var sx, sy, d = document,
r = d.documentElement,
b = d.body;
sx = r.scrollLeft || b.scrollLeft || 0;
sy = r.scrollTop || b.scrollTop || 0;
return [sx, sy];
}
}
返回带有两个整数的数组-[scrollLeft,scrollTop]
2018年答案:
进行此类操作的最佳方法是使用Intersection Observer API。
Intersection Observer API提供了一种异步观察目标元素与祖先元素或顶级文档的视口相交的变化的方法。
从历史上看,检测一个元素的可见性或两个元素相对于彼此的相对可见性一直是一项艰巨的任务,其解决方案不可靠且易于导致浏览器和用户访问的站点变慢。不幸的是,随着网络的成熟,对此类信息的需求也在增长。出于多种原因需要路口信息,例如:
- 滚动页面时延迟加载图像或其他内容。
- 实施“无限滚动”网站,在您滚动时会加载和呈现越来越多的内容,从而使用户不必翻阅页面。
- 报告广告可见度,以计算广告收入。
- 根据用户是否看到结果来决定是否执行任务或动画处理。
过去实现交叉检测涉及事件处理程序,并循环调用Element.getBoundingClientRect()之类的方法来为每个受影响的元素建立所需的信息。由于所有这些代码都在主线程上运行,因此即使其中之一也可能导致性能问题。当一个站点加载了这些测试时,事情可能变得很丑陋。
请参见以下代码示例:
var options = { root: document.querySelector('#scrollArea'), rootMargin: '0px', threshold: 1.0 } var observer = new IntersectionObserver(callback, options); var target = document.querySelector('#listItem'); observer.observe(target);
大多数现代浏览器都支持IntersectionObserver,但是您应该使用polyfill来实现向后兼容。
如果您使用的是jQuery,则有一个完美的功能:.scrollTop()
在这里doc-> http://api.jquery.com/scrollTop/
注意:您可以使用此功能来检索或设置位置。
另请参阅:http : //api.jquery.com/?s=scroll
element
并且document.body
只是举例)。有关详细信息,请参见howtocreate.co.uk/tutorials/javascript/browserwindow。