位置: IT常识 - 正文

js监听页面或元素scroll事件,滚动到底部或顶部(js监听地址栏)

编辑:rootadmin
js监听页面或元素scroll事件,滚动到底部或顶部

推荐整理分享js监听页面或元素scroll事件,滚动到底部或顶部(js监听地址栏),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js监听url变化方法,js如何监听值的变化,js监听页面元素变化,js监听元素是否在可见区域,js监听http,js监听页面上的所有事件,js监听元素是否在可见区域,js监听页面上的所有事件,内容如对您有帮助,希望把文章链接给更多的朋友!

js监听页面或元素scroll事件,滚动到底部或顶部(js监听地址栏)

基本原理:

1、滚动到底部元素的滚动距离 + 元素的可视距离 == 元素的滚动条总距离2、滚动到顶部元素的滚动距离 == 0

监听页面滚动

<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Scroll Demo</title> </head> <body> <style> .box { height: 5000px; text-align: center; } </style> <div class="box" id="box">打开控制台查看</div> <!-- 引入节流方法 --> <script src="https://cdn.jsdelivr.net/npm/throttle-debounce@5.0.0/umd/index.min.js"></script> <script> // 滚动方向枚举值 const DIRECTION_ENUM = { DOWN: "down", UP: "up", }; // 距离顶部或底部的阈值 const threshold = 20; // 记录前一个滚动位置 let beforeScrollTop = 0; function handleScroll() { // 距顶部 var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; // 可视区高度 var clientHeight = document.documentElement.clientHeight || document.body.clientHeight; // 滚动条总高度 var scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight; // 打印数值 console.table([ { label: "距顶部", value: scrollTop, }, { label: "可视区高度", value: clientHeight, }, { label: "滚动条总高度", value: scrollHeight, }, { label: "距顶部 + 可视区高度", value: scrollTop + clientHeight, }, ]); // 确定滚动方向 let direction = DIRECTION_ENUM.DOWN; if (beforeScrollTop > scrollTop) { direction = DIRECTION_ENUM.UP; } // 通过滚动方向判断是触底还是触顶 if (direction == DIRECTION_ENUM.DOWN) { // 滚动触底 if (scrollTop + clientHeight + threshold >= scrollHeight) { console.log("滚动触底"); } } else { // 滚动到顶部 if (scrollTop <= threshold) { console.log("滚动到顶部"); } } beforeScrollTop = scrollTop; } // 滚动节流 const throttleHandleScroll = throttleDebounce.throttle( 1000, handleScroll ); // 监听滚动 window.addEventListener('scroll', throttleHandleScroll); </script> </body></html>

同理,也可以监听元素的滚动

<style> .box-wrap { height: 500px; overflow-y: auto; } .box { height: 5000px; text-align: center; }</style><div class="box-wrap" id="box"> <div class="box">打开控制台查看</div></div><script> // 监听滚动 let box = document.querySelector("#box"); box.addEventListener("scroll", function (e) { let scrollTop = e.target.scrollTop; let clientHeight = e.target.clientHeight; let scrollHeight = e.target.scrollHeight; // 打印数值 console.table([ { label: "距顶部", value: scrollTop, }, { label: "可视区高度", value: clientHeight, }, { label: "滚动条总高度", value: scrollHeight, }, { label: "距顶部 + 可视区高度", value: scrollTop + clientHeight, }, ]); });</script>

判断触底需要注意的点:

滚动时需要区分向上滚动还是向下滚动滚动时可以设置一个阈值,并非完全触底或触顶才触发滚动事件需要做节流操作,以免短时间内被多次触发

在线Demo

16.1、监听浏览器scroll滚动事件,触顶和触底16.2、监听元素scroll滚动事件,触顶和触底

参考 js 监听页面滚动到底部,监听可视区域滚动到底部

本文链接地址:https://www.jiuchutong.com/zhishi/269781.html 转载请保留说明!

上一篇:windows11怎么显示文件后缀名? win11显示后缀名的两种方法(windows11怎么显示桌面图标)

下一篇:Linux系统中开起和关闭用户的磁盘空间限制的命令(linux开启)

  • 研发费用加计扣除75%还是100%
  • 企业如何帮员工交公积金
  • 出租人融资租赁发生的初始直接费用
  • 无法支付的应付账款需要交增值税吗
  • 出租车定额发票真伪查询
  • 初级职称需要进行继续教育吗
  • 财报中计提
  • 法人分红需要交个税吗
  • 自然人税收系统生产经营怎么申报
  • 公司有食品流通证能卖保健品吗
  • 加计抵减申报表填写说明
  • 二手商品没有发票
  • 生产设备购买交付会计分录
  • 同一个客户有应收也有应付怎么办
  • 承租承包经营个人所得税
  • 提取职工福利费计入什么科目
  • 收到的财政补贴如何做账
  • 一般纳税人销售二手车增值税税率
  • 业主委员会的收益
  • 产生个人所得税之后是不是不能公益性岗位
  • 公允价值变动损益转入其他业务成本
  • 地产商自持是什么意思
  • 建筑公司一般纳税人增值税税率
  • 高新企业研发费用认定条件
  • 公司开一般户弊端
  • 税控盘服务费抵减有效期几年
  • 工程管理咨询费计入什么科目
  • 债权转让账务如何处理
  • 收到的投资收益属于经营活动产生的现金流量吗
  • 包装物租金怎么算
  • 工资属于劳务收入吗
  • 汇算清缴所得税退回做账
  • 成本核算的意义是什么
  • 事业单位收到拨款怎么办
  • 高新企业政府补贴怎么入账
  • 公司中奖要交税吗
  • 税务 终结执行
  • 来料加工企业需注意什么
  • 《ai人工智能》
  • web前端面试基础知识
  • Laravel5权限管理方法详解
  • 应交税费应交增值税销项税额
  • wordpress!
  • mongodb4.0安装教程
  • 合同资产科目包含增值税吗
  • 伤残补助金和工资一样吗
  • 材料采购账户的借方登记什么
  • sqlserver数据库和mysql区别
  • mysql怎么恢复数据
  • 解决问题
  • 国债利息收入要征税吗
  • 月末需要计提
  • 库存商品暂估入库是什么意思
  • 房屋租赁合同印花税计税依据
  • 应交税金的负数重分类
  • 财务费用利息收入的账务处理
  • 企业进项构成比例
  • 企业所得税税率多少
  • 用友为什么引入不了账套
  • 公司工会经费怎么花不违规
  • 阿里云linux 服务器 字符集
  • ubuntu 安装
  • 网关dns配置异常是什么意思
  • win10怎么设置定时关机和开机
  • vim的配置文件
  • nodejss
  • 如何使用蓝牙耳机
  • shell脚本介绍
  • 使用scp获取远程linux服务器上的文件 linux远程拷贝文件
  • android之Java+html+javascript混合开发
  • 编写shell脚本,实现备份文件:每天18:00归档
  • unity编译速度吃什么硬件?
  • unity mesh编程
  • android电池优化设置
  • jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
  • 12366纳税服务热线工作时间
  • 新开公司交印花税
  • 广东省电子税务局电话
  • 怎么修改税局预留号码
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设