vue js 监听页面滚动触底 监听iframe滚动及触底 带你搞清 offsetHeight,scrollTop,scrollHeight区别

本文主要是介绍vue js 监听页面滚动触底 监听iframe滚动及触底 带你搞清 offsetHeight,scrollTop,scrollHeight区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

想要监听页面滚动是否触底,你要先搞清 offsetHeight,scrollTop,scrollHeight区别,以及如何让应用,话不多说上代码💁🏻

offsetHeight: 它是包括padding、border、水平滚动条,但不包括margin的元素的高度。

⚠️:对于行内元素这个属性值一直是0,单位px,是只读元素。

scrollTop:表示在有滚动条时,滚动条向下滚动的距离也就是元素顶部被遮住部分的高度即“卷”起来的高度。

⚠️:在无滚动条时scrollTop==0恒成立,单位px,可读可设置。例如:“回滚到顶部”就可以用它来设置。

scrollHeight:当子元素比父元素高的时候,父元素不想被子元素撑高,于是出现了滚动条,在滚动的过程中子元素有部分会被隐藏掉,scrollHeight是 父元素高度offsetHeight + “卷”起来的高度 scrollTop,也可以理解为是子元素的offsetHeight值。



在了解了这三个属性的含义之后 理解触底就很简单了 其实就是 offsetHeight(显示区域高度) + scrollTop(卷起来的高度) - scrollHeight (子元素自身高度) >= -1 的时候就代表页面已经滑到底了~

接下来会有两种监听触底的案例:

1.div元素内内容触底

2.iframe内内容触底

 

我们先来看下第一种:div元素内内容触底

<div class="wrapper"><div class="content">独立寒秋,湘江北去,橘子洲头。看万山红遍,层林尽染;漫江碧透,百舸争流。鹰击长空,鱼翔浅底,万类霜天竞自由。怅寥廓,问苍茫大地,谁主沉浮?携来百侣曾游。忆往昔峥嵘岁月稠。恰同学少年,风华正茂;书生意气,挥斥方遒。...<div>
</div><style>
.wrapper {margin: 0 auto;background: #fff;height: 100vh;overflow: hidden;
}
.wrapper-content {height: 100vh;overflow-y: scroll;
}
<style><script>export default {created() {this.$nextTick(() => {const el = document.querySelector('.content');const offsetHeight = el.offsetHeight;el.onscroll = () => {const scrollTop = el.scrollTop;        const scrollHeight = el.scrollHeight;if (offsetHeight + scrollTop - scrollHeight >= -1) {console.log("到达底部了")}};});},}
<script>

 

第二种就是监听iframe内的滚动是否触底

<style>
.wrapper {margin: 0 auto;background: #fff;height: 100vh;overflow: hidden;
}
.wrapper-content {height: 100vh;overflow-y: scroll;
}
<style><div class="wrapper"><iframeid="iframepage"src="XXX.html"frameborder="0"width="90%"class="content"></iframe>
<div><script>export default {created() {this.$nextTick(() => { // iframe包裹const frameWindow = document.getElementById('iframepage').contentWindow;$(frameWindow).scroll(function () {const ifm =frameWindow.document.documentElement;const scrollHeight = ifm.scrollHeight;const offsetHeight = frameWidow.innerHeight;const scrollTop = frameWidow.document.body.scrollTop;if (offsetHeight + scrollTop - scrollHeight >= -1) {console.log("到底啦~")}});});},}
<script>

 

这篇关于vue js 监听页面滚动触底 监听iframe滚动及触底 带你搞清 offsetHeight,scrollTop,scrollHeight区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/815791

相关文章

hevc和H.264格式的区别

HEVC(High Efficiency Video Coding)和H.264(也称为Advanced Video Coding,AVC)都是视频压缩标准,但它们之间存在一些显著的区别,主要集中在压缩效率、资源需求和兼容性方面。 压缩效率 HEVC,也被称为H.265,提供了比H.264更高的压缩效率。这意味着在相同的视频质量下,HEVC能够以大约一半的比特率进行编码,从而减少存储空间需求和

JAVA读取MongoDB中的二进制图片并显示在页面上

1:Jsp页面: <td><img src="${ctx}/mongoImg/show"></td> 2:xml配置: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

vue, 左右布局宽,可拖动改变

1:建立一个draggableMixin.js  混入的方式使用 2:代码如下draggableMixin.js  export default {data() {return {leftWidth: 330,isDragging: false,startX: 0,startWidth: 0,};},methods: {startDragging(e) {this.isDragging = tr

JavaScript全屏,监听页面是否全屏

在JavaScript中,直接监听浏览器是否进入全屏模式并不直接支持,因为全屏API主要是关于请求和退出全屏模式的,而没有直接的监听器可以告知页面何时进入或退出全屏模式。但是,你可以通过在你的代码中跟踪全屏状态的改变来模拟这个功能。 以下是一个基本的示例,展示了如何使用全屏API来请求全屏模式,并在请求成功或失败时更新一个状态变量: javascriptlet isInFullscreen =

vue项目集成CanvasEditor实现Word在线编辑器

CanvasEditor实现Word在线编辑器 官网文档:https://hufe.club/canvas-editor-docs/guide/schema.html 源码地址:https://github.com/Hufe921/canvas-editor 前提声明: 由于CanvasEditor目前不支持vue、react 等框架开箱即用版,所以需要我们去Git下载源码,拿到其中两个主

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码+详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装,可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 (1)通过position属性,可以控制下拉选项的位置 (2)通过传入width属性, 可以自定义下拉选项的宽度 (3)通过传入classN

Eclipse+ADT与Android Studio开发的区别

下文的EA指Eclipse+ADT,AS就是指Android Studio。 就编写界面布局来说AS可以边开发边预览(所见即所得,以及多个屏幕预览),这个优势比较大。AS运行时占的内存比EA的要小。AS创建项目时要创建gradle项目框架,so,创建项目时AS比较慢。android studio基于gradle构建项目,你无法同时集中管理和维护多个项目的源码,而eclipse ADT可以同时打开

js+css二级导航

效果 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Con

基于Springboot + vue 的抗疫物质管理系统的设计与实现

目录 📚 前言 📑摘要 📑系统流程 📚 系统架构设计 📚 数据库设计 📚 系统功能的具体实现    💬 系统登录注册 系统登录 登录界面   用户添加  💬 抗疫列表展示模块     区域信息管理 添加物资详情 抗疫物资列表展示 抗疫物资申请 抗疫物资审核 ✒️ 源码实现 💖 源码获取 😁 联系方式 📚 前言 📑博客主页: