javascript - 如何计算防弹滚动进度

标签 javascript css scrollbar progress user-experience

我正在使用以下行计算页面上的滚动进度(向下滚动后隐藏在 View 中的文档百分比):

window.pageYOffset / document.body.scrollHeight

这适用于大多数网站。但是一些网站调整了滚动或溢出属性,实际上破坏了上述计算。

例如,on this page上面的行将始终返回 0

有没有更好的方法来计算在这种情况下适用的滚动进度?

最佳答案

这是我的方法:

window.onscroll = function() {scrollFunction()};

function scrollFunction() {
    let limit = Math.max( document.body.scrollHeight, document.body.offsetHeight, 
    document.documentElement.clientHeight, document.documentElement.scrollHeight,
    document.documentElement.offsetHeight );

let footerHeight = document.querySelector('footer').offsetHeight; 

let max = limit - window.innerHeight - footerHeight;

let height =  window.pageYOffset / max * 100;

height = Math.min(100, Math.max(0, height));

const loader = document.getElementById("loader-scroll");

loader.style.width = 0 + height + "%";
}

它适用于大多数浏览器

关于javascript - 如何计算防弹滚动进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21703587/

相关文章:

javascript - 将 json 数据从一个组件传递到另一组件。 Vue.js

javascript - 如何每 x 秒更改数组中 <li> 的内容?

javascript - 如何将光标样式更改为悬停在图表点上的指针?

css - 居中显示 :table-row UL/LI list

javascript - 如何在 html 元素后面添加模糊?

c# - 在 ASP.NET 4.5 中的 AutoCompleteExtender 中添加滚动条

firefox - 在 Firefox 和 Chrome 中隐藏多行 SELECT 的垂直滚动条?

javascript - 如何获取数组嵌套对象子对象的父对象MeteorJs - 天文学

html - 在不留空白的情况下使用图层(z-index)

c# - Richtextbox 将行号转换为滚动条位置