位置: IT常识 - 正文

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

发布时间:2023-12-02
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开启)

  • 房地产公司自用房屋销售土地增值税计算
  • 递延所得税抵消分录
  • 物流公司如何办理营运证
  • 增值税发票管理办法及细则
  • 公务员抚恤费
  • 哪些福利费不税前扣除
  • 物业公司停车费按什么征税
  • 进项都抵扣完了怎么办
  • 农药增值税减免政策
  • 当月费用次月收到发票
  • 汇算清缴调增的金额,如何做会计分录
  • 计提的应付利息怎么冲回
  • 员工食堂报销的费用怎么做分录
  • 分类账和明细账平行登记规则
  • 接受现金捐赠怎么写分录
  • 典当行借贷属于民间借贷吗
  • 代扣代缴的增值税怎么做账
  • 企业购买国债逆回购需要缴纳增值税吗
  • 一般纳税人简易征收3%
  • 出口退税要交企业所得吗
  • 淘宝开企业店铺需要什么资料
  • 发票纳税人识别号错了能重新开吗
  • 国税发200931号文件解读
  • 出纳能办理涉税实名认证吗?
  • 公司对公账户可以转私人账户多久到账
  • 广告制作费怎么入账
  • 自制材料入库计划成本
  • 退休职工费用哪里列支
  • 房屋装修费是否分摊到地下车位成本
  • 酒店客房收入怎么算
  • uefi模式怎么装机
  • win11怎么取消开机启动项
  • win10开机内存占用60% 8g占用过高
  • 用友软件查其他业务收入怎么查
  • win10应用商店没有软件库
  • 如何在qq好友旁边打字
  • 金枝玉叶怎么养才爆盆
  • 计划成本法购入材料
  • 不征税收入税收政策
  • 公司股东变更要交税吗可以将股东变更吗
  • PHP:mcrypt_module_get_algo_block_size()的用法_Mcrypt函数
  • idea如何运行springboot项目
  • php 进程通信
  • 疯狂世界百科
  • overflow常见释义
  • php 微信公众号自定义菜单
  • 增值税进项税加计抵扣
  • 印花税的缴税对象是
  • 财务报表季报应付职工薪酬是指三个月工资累计还是
  • 购买一台电脑2400元贵吗
  • 结转完工产品成本的会计科目
  • 企业承担残疾比例是多少
  • 软件企业研发费用
  • 资产处置损益要写明细账吗
  • 制作费计入什么费用
  • 关税征收方式
  • 收承兑汇票的利息怎么算
  • 增值税普票遗失可以补开吗
  • 手写账目表格怎么做
  • mysql8.0 主从
  • 粘贴板有问题不能粘贴怎么处理
  • mac系统怎么打开任务管理器
  • windows xp.
  • win8怎么关闭实时保护
  • win8怎么玩帝国时代2
  • windows10 upnp
  • linux ./文件
  • win8系统盘清理
  • windows资源管理器在哪个文件夹
  • win10出现恢复界面0xc000000f
  • linux命令有啥用
  • 淘宝店铺首页导航栏css
  • perl的$_
  • JS实现的ajax和同源策略(实例讲解)
  • 页面怎么打印在一张张上
  • 最简单手电筒
  • 税务网上申报怎样操作
  • 个人所得税网上报税流程
  • 伊朗开心果进口价格
  • 李民基
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号