JavaScript 原生判断滚动到底部的实现方法
本文介绍如何利用 JavaScript 原生 API 判断元素是否滚动到底部。核心逻辑基于 element.scrollHeight、scrollTop 和 clientHeight 三个属性。通过公式 scrollHeight - scrollTop === clientHeight 即可实现精确判断,适用于用户协议阅读等场景。
判断滚动到底部的核心逻辑
核心逻辑
判定滚动到底部所需的关键参数
滚动区域内部内容的实际总高度
当前滚动条距离顶部的垂直偏移量
视口内可见的内容区域高度
上述参数分别对应以下三个DOM API属性。
element.scrollHeight 用于获取元素内容的完整高度,该属性为只读。
element.scrollTop 用于获取或设置元素的滚动偏移量,常用于计算滚动条位置;若元素无垂直滚动条,则其值默认为0。
element.clientHeight 用于读取元素在视口中的可见高度,该属性为只读。
直接引用MDN文档中提供的经典判定公式。
判断元素是否已滚动至底部
当元素滚动至底部时,下述等式成立并返回true;否则返回false。
element.scrollHeight - element.scrollTop === element.clientHeight
实际应用案例:用户协议阅读
应用场景:用户服务协议
需确保用户完整阅读协议后方可点击同意,即滚动条触底视为阅读完成。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tab</title>
<style>
textarea{height: 200px;width: 300px}
</style>
</head>
<body>
<p>
<textarea>
用户咨询条款
一、咨询系统提供的服务
1、本网站咨询系统(以下简称“本系统”)为用户提供参与各种咨询项目(以下简称“项目”)的机会。用户在包之网上注册成为会员,并可申请某一专家会员通过包之网平台及电话等方式为其提供咨询服务。
2、您应按照您想要咨询的专家其所对应的专家收费金额,根据您希望互动/通话时间的长短,预先存入咨询费用,方可进行预约、咨询。咨询完成后,剩余的款项将在15个工作日内直接退还给您。您应提供详细的收款信息,否则本网站不承担任何责任。提请您注意,若预存金额过低,可能导致咨询中断。咨询费用根据本网站标准的专家收费金额及实际通话时间进行计算。您同意因银行处理本网站对您的每一笔付款所产生的全部费用将由您自行承担。
3、如果您对专家的工作内容或提供咨询服务质量等有异议,则在此等争议完全解决之前,本网站将扣留应付给您的款项。
4、如果您需要发票,应直接向提供咨询的专家要求,本网站不提供任何发票。
5、专家收费详见本网站不时发布的专家收费金额。专家收费金额及其修改均为本条款不可分割的组成部分,请您申请前仔细查看。
6、本网站根据实际情况尽可能根据您的要求、申请与专家进行匹配, 但专家有权不予提供服务。
</textarea>
</p>
<p>
<input type="checkbox" value="1" disabled="disabled"> 同意
</p>
<script>
//获取checkbox元素
var checkbox=document.querySelector('input[type=checkbox]');
document.querySelector('textarea').addEventListener('scroll',function () {
//读取内容区域的真实高度(滚动条高)
// console.log(this.scrollHeight);
//读取滚动条的位置
// console.log(this.scrollTop);
//设置滚动到的位置
// this.scrollTop=800;
//读取元素的高度
// console.log(this.clientHeight)
//意思就是内容总体的高度 - 滚动条的偏移值 === 元素的高度(包含内边)但不包含外边距,边框,以及滚动条
if(this.scrollHeight-this.scrollTop===this.clientHeight){
console.log("到达底部");
//移除disabled属性
checkbox.removeAttribute('disabled')
}
})
</script>
</body>
</html>
近日查阅MDN文档时注意到该API,由此延伸思考。 Element.scrollTop
以上关于JS原生判断内容区域是否滚动到底部的实例代码即为全部内容,旨在提供参考,感谢支持。
D3.js 比例尺与坐标轴的配置详解
2026-11-05 16:54:46
JavaScript怎么遍历对象的Symbol键和不可枚举属性
2026-11-05 13:13:39
封装一个健壮的JS字符串判空工具函数
2026-11-05 12:16:14
JavaScript合并数组的三种常用方法:concat、扩展运算符与push
2026-11-05 11:22:29
JavaScript立即执行函数(IIFE)是什么及基本语法
2026-11-05 10:51:19
