位置: 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开启)

  • 宏基4752g固态硬盘安装教程(宏基4752怎么样)(宏基4752g固态硬盘教程)

    宏基4752g固态硬盘安装教程(宏基4752怎么样)(宏基4752g固态硬盘教程)

  • 微信让群内好友邀请进群怎么操作(微信群内好友发消息工具)

    微信让群内好友邀请进群怎么操作(微信群内好友发消息工具)

  • 蚂蚁借呗关闭(蚂蚁借呗关闭后征信上还有记录吗)

    蚂蚁借呗关闭(蚂蚁借呗关闭后征信上还有记录吗)

  • 微信怎么发电子版文件(微信怎么发电子发票)

    微信怎么发电子版文件(微信怎么发电子发票)

  • 谷歌服务助手用不了(谷歌服务助手用什么登录)

    谷歌服务助手用不了(谷歌服务助手用什么登录)

  • b站视频怎么缓存(B站视频怎么缓存到U盘)

    b站视频怎么缓存(B站视频怎么缓存到U盘)

  • 怎么不按键呼叫小爱同学(怎么不按键呼叫语音助手)

    怎么不按键呼叫小爱同学(怎么不按键呼叫语音助手)

  • 闲鱼直播回放怎么删除(闲鱼直播回放怎么设置)

    闲鱼直播回放怎么删除(闲鱼直播回放怎么设置)

  • 蚂蚁森林时间可以改吗(蚂蚁森林可以隐身吗)

    蚂蚁森林时间可以改吗(蚂蚁森林可以隐身吗)

  • b站大会员到期后缓存能看吗(b站会员到期时间是月底吗)

    b站大会员到期后缓存能看吗(b站会员到期时间是月底吗)

  • 苹果10屏幕多大尺寸(苹果屏幕多大尺寸)

    苹果10屏幕多大尺寸(苹果屏幕多大尺寸)

  • 苹果手机微信语音显示2g(苹果手机微信语音发不出去咋回事)

    苹果手机微信语音显示2g(苹果手机微信语音发不出去咋回事)

  • 快手一天点赞多少上限(快手一天点赞多少作品)

    快手一天点赞多少上限(快手一天点赞多少作品)

  • 电脑没有dp接口怎么办(电脑没有dp接口华为vr)

    电脑没有dp接口怎么办(电脑没有dp接口华为vr)

  • 视频会议静音后能听到声音吗(视频会议静音后还能说话吗)

    视频会议静音后能听到声音吗(视频会议静音后还能说话吗)

  • word文字排版弄成一页(文字word排版怎么排)

    word文字排版弄成一页(文字word排版怎么排)

  • 手机个人热点怎么用(手机个人热点怎么连接电脑)

    手机个人热点怎么用(手机个人热点怎么连接电脑)

  • 淘宝预售怎么付款(淘宝预售订单付款流程)

    淘宝预售怎么付款(淘宝预售订单付款流程)

  • 京东实名认证怎么解绑(京东实名认证怎么更换)

    京东实名认证怎么解绑(京东实名认证怎么更换)

  • 地图如何不显示文字(地图改位置怎么改)

    地图如何不显示文字(地图改位置怎么改)

  • 型号lla是什么版本(iphone型号lla是哪个国家)

    型号lla是什么版本(iphone型号lla是哪个国家)

  • 苹果拍照镜像怎么取消(苹果拍照镜像怎么办)

    苹果拍照镜像怎么取消(苹果拍照镜像怎么办)

  • usb供电不足怎么办(usb供电不正常)

    usb供电不足怎么办(usb供电不正常)

  • 天猫国际如何找人代付(天猫国际从淘宝哪里找)

    天猫国际如何找人代付(天猫国际从淘宝哪里找)

  • 增值税普通发票几个点
  • 出口免税收入的计税依据
  • 所得税视同销售行为有哪些
  • 金税盘如何查看开票机号
  • 预提利息收入纳税调整
  • 总产值和主营业务收入
  • 税务大厅可以开票吗
  • 电子税务局上财务制度备案错误是啥意思
  • 滞留票怎么做账务处理
  • 自产货物用于本企业在建工程交增值税不
  • 临时设施费怎么结算
  • 报销油费如何写摘要及会计分录怎么做?
  • 已认证抵扣的发票如何红字信息表
  • 对账状态未对账
  • 以物易物差价印花税
  • 房地产企业预缴税费
  • 文化创意企业一般纳税人开票产生的税率为多少?
  • 民办非企业单位是私立还是公立
  • 货物已到发票未到怎么做账
  • 厂房进项抵扣
  • 企业合同约定调岗不接受辞退没赔偿成立吗
  • 电费先付后开票怎么做账
  • win11如何更改开始菜单位置
  • 经济成本和会计成本的大小
  • 向非绑定账户转账超限是什么意思
  • 无法找到脚本文件vbs
  • php遍历显示多维数组
  • 数字证书费用计入管理费用什么科目
  • 在建工程完工后转入哪里
  • 电脑台式机显卡怎么拆
  • nclaunch.exe - nclaunch进程有什么用 是什么意思
  • 购买材料支出属于资本性支出吗
  • 个人借款的合法利息是多少
  • 建筑业会计需要做到哪些
  • 人民币账户购汇支付
  • 营业外收入账户性质
  • php编程基础与案例开发
  • php图形用户界面
  • 潘塔纳尔湿地位于巴拉圭盆地
  • framework 开发
  • 火车票可以直接去火车站买吗
  • thinkphp i方法
  • 覆盖的盖
  • 企业所得税包含在税金及附加里面吗
  • 看了这篇文章感触很深的说说
  • php array_walk_recursive 使用自定的函数处理数组中的每一个元素
  • 可予税前扣除的合理部分
  • 转出未交增值税最终怎么转平
  • 低值易耗品费用计入什么科目
  • 发票待开是什么意思?
  • 临时工交押金会扣钱吗
  • 非本公司员工能上班吗
  • 境外捐赠入账
  • python中np.array用法
  • 个人所得税的征税范围
  • 农产品收购发票可以不抵扣吗
  • 高新企业研发收入占总收入比例怎么算
  • 结转费用后利润怎么算
  • 审计如何判断跨期
  • 以原材料投入资本
  • 发票的几种分类
  • 集团固定资产管理
  • 汇算清缴后多交的企业所得税能退吗
  • 编写高质量代码改善JAVA程序的151个建议
  • 恢复mysql数据库
  • 提高系统能力
  • 双系统没有选择
  • win8怎么清空电脑只剩系统
  • nerosmartstart.exe - nerosmartstart是什么进程 作用是什么
  • win7不能自动启动
  • js声明数据类型
  • 关闭iebrowser
  • perl中sub
  • jQuery+HTML5实现弹出创意搜索框层
  • jquerygrid
  • javascript学习指南
  • javascript的基本规范
  • javascript 对象
  • 安卓activity类
  • 出售144平方米以内的房子
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设