我试图用JavaScript检测浏览器滚动条的位置,以确定当前视图在页面中的位置。
我的猜测是,我必须检测拇指在轨道上的位置,然后是拇指的高度占轨道总高度的百分比。是我过于复杂了,还是JavaScript提供了一个更简单的解决方案?代码会是什么样子?
我试图用JavaScript检测浏览器滚动条的位置,以确定当前视图在页面中的位置。
我的猜测是,我必须检测拇指在轨道上的位置,然后是拇指的高度占轨道总高度的百分比。是我过于复杂了,还是JavaScript提供了一个更简单的解决方案?代码会是什么样子?
当前回答
我这样做的Chrome上的<div>。
元素。scrollTop -由于滚动而隐藏在顶部的像素。如果没有滚动,它的值为0。
元素。scrollHeight -是整个div的像素。
元素。clientHeight -是你在浏览器中看到的像素。
var a = element.scrollTop;
将是位置。
var b = element.scrollHeight - element.clientHeight;
将是scrollTop的最大值。
var c = a / b;
将是滚动的百分比[从0到1]。
其他回答
你可以使用element。scrollTop和元素。scrollLeft分别获取已滚动的垂直和水平偏移量。元素可以是文档。如果你关心整页的话。你可以将它与element进行比较。offsetHeight和element。如果需要百分比,则offsetWidth(同样,element可能是body)。
这是另一种获取滚动位置的方法:
const getScrollPosition = (el = window) => ({
x: el.pageXOffset !== undefined ? el.pageXOffset : el.scrollLeft,
y: el.pageYOffset !== undefined ? el.pageYOffset : el.scrollTop
});
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]
我这样做的Chrome上的<div>。
元素。scrollTop -由于滚动而隐藏在顶部的像素。如果没有滚动,它的值为0。
元素。scrollHeight -是整个div的像素。
元素。clientHeight -是你在浏览器中看到的像素。
var a = element.scrollTop;
将是位置。
var b = element.scrollHeight - element.clientHeight;
将是scrollTop的最大值。
var c = a / b;
将是滚动的百分比[从0到1]。
如果你关心整个页面,你可以使用这个:
document.body.getBoundingClientRect().top