vue js 监听页面滚动触底 && 监听iframe滚动及触底 && 带你搞清 offsetHeight,scrollTop,scrollHeight区别_vue offsetheight_爱吃爱喝爱玩儿乐的博客-程序员秘密

技术标签: vue  JavaScript  vue.js  javascript  

想要监听页面滚动是否触底,你要先搞清 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">
    <iframe
      id="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>

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Ms_alinda/article/details/117019553

智能推荐

idea中maven无法拉取报:Cannot resolve plugin org.apache.maven.plugins:maven-clean-plugin:2.5_Hui_Hong_TaiLang的博客-程序员秘密

(1)图片问题显示,不管怎么更新和clear本地的maven都不行(2)我的解决方法把自己的maven下载仓库地址,换成阿里的 &lt;mirror&gt; &lt;id&gt;alimaven&lt;/id&gt; &lt;mirrorOf&gt;central&lt;/mirrorOf&gt; &lt;name&gt;aliyun maven&lt;/name&gt; &lt;url&gt;http://maven.aliyun.com/nex

gvim的学习_abc1104332737的博客-程序员秘密

http://blog.csdn.net/adam8/article/details/1688086转载于:https://www.cnblogs.com/xianqingzh/p/3984380.html

OAuth 2.0 构建微服务身份认证(二):java实现过程_oauth2.0java实现_awj321000的博客-程序员秘密

Spring Boot有了Spring Boot这样的神器,可以很简单的使用强大的Spring框架。你需要关心的事儿只是创建应用,不必再配置了,“Just run!”,这可是Josh Long每次演讲必说的,他的另一句必须说的就是“make jar not war”,这意味着,不用太关心是Tomcat还是Jetty或者Undertow了。专心解决逻辑问题,这当然是个好事儿,部署简单了很多。创建Sp...

Yii2.0框架中如何进行身份验证和授权操作?支持哪些认证方式和授权方式?_快点好好学习吧的博客-程序员秘密

HttpBearerAuth认证方式也是基于HTTP协议的认证方式,需要在每个请求的Header中传递用户认证信息,与HttpBasicAuth认证方式不同的是,HttpBearerAuth认证方式使用了token的形式传递认证信息。基于规则的访问控制(RBAC)与基于角色的访问控制(RBAC)相似,不同之处在于RBAC需要对每个角色进行繁琐的授权,而基于规则的访问控制可以直接对权限进行授权,更加灵活。表单认证方式是一种传统的认证方式,用户输入用户名和密码,提交后后台进行验证,通过则登录成功,否则失败。

CSDN的博客……_sizheng0320的博客-程序员秘密

说实话,CSDN的博客感觉是不如从前了的,我之所以还一直赖在这里不走,一是几年前我从进入CSDN的论坛以来,对它有一定的感情,二是这里毕竟是号称国内最大的程序员社区,技术氛围似乎还不错。 可是,曾几何时,程序员秘密经过了改版,改版后发现博文的人气大不如前,可能是博文的显示、更新机制变了吧,使得我等小民的博文无人问津。用户的体验、博客的易用性上,也总是让人感觉说不出的别扭,现在还把自定义的

lombok的使用_lombok 字段怎么调用_realize的博客-程序员秘密

作用:通过用简单的注释集代替众多的代码。常用注解:@Setter :注解在类或字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法。@Getter :使用方法同上,区别在于生成的是getter方法。@ToString :注解在类,添加toString方法。@EqualsAndHashCode: 注解在类,生成hashCode和equals方法。@...

随便推点

python计算线性代数(矩阵的相关计算)_python计算相关矩阵_hence..的博客-程序员秘密

更多文章:本文介绍如何用sympy库计算线性代数同样是使用python的sympy库,安装方法有很多这里就不介绍了创建以下矩阵:$$$$(21)  \left( \begin{array}{c} 2\\ 1\\\end{array} \right) \,\,(21​)(2,1)\left( 2,1 \right)(2,1)(1234)\left( \begin{matrix} 1& 2\\ 3& 4\\\end{matrix} \right)(13​24​)(0123

网络安全学习指南_leslietuen的博客-程序员秘密

大家好,我是yison个人网站:www.argunriver.comgithub:www.github.com/datud围脖:朱临路大家好,有同学反应,希望能写一篇怎么学习网络安全的指南,所以今天先写一篇文章简要介绍一下。网络安全技能要求:1、掌握各类网络协议的原理与实践:TCP/IP、VLAN/Trunk/MSTP/VRRP/802.1x、OSPF/BGP/MPLS...

oracle绑定变量窥探,动态SQL的dbms_sql.bind_variable无法触发绑定变量窥探_Axaxaxc的博客-程序员秘密

对表格的2个数据分布不均衡的列都做了直方图的统计,今天跟踪系统,发现居然没有触发绑定变量窥探。程序是用动态SQL开发的一个共用的功能,其中更就用到了:L_PROCESS_PHASE := 2;IF P_COL_VALUE_TAB.COUNT &gt; 0 THENFOR I IN 1..P_COL_VALUE_TAB.LAST LOOPIF P_COL_VALUE_TAB.exists(I) TH...

html5作品分析报告,性能报告之HTML5 性能测试报告_Ronald XIE的博客-程序员秘密

引言1.1. 编写目的HTML5 作为当前“最火”的跨平台、跨终端(硬件)开发语言,越来越受到前端开发者 的重视,无论是 PC 端还是当前“火热”的移动端,其前端开发人员的占比均越来越高。此 消彼长,HTML5 开发者的增加自然导致 WPF / Flex / QT 等前端技术开发人员的缩减。为了 解决前端“跨平台”的问题,并应对开发人员稀缺的窘境,我们迫切的需要选择或更换新的 技术路线,而 HTM...

CSGO&饥荒服务器搭建保姆级教程_ShilongLi01的博客-程序员秘密

asdlink准备第一步:软硬件软件:Xshell用于连接云服务器。进去填写邮箱,他会给你发个邮件,通过邮件获得下载链接,通过下载链接下载。硬件:云服务器演示使用阿里云。进去直接购买 轻量应用服务器 1核2G 地域选择距离较近的距离就好,镜像类型选择系统镜像,系统镜像选择CentOS 7.3,数据盘40够用,CSGOserver加上脚本也就29G的样子。第二步:与服务器建立连接1、 购买完成后,进入控制台,点击轻量应用级别服务器。找到刚刚购买好的服务器,进去左边服务器运维中点击远程连接

android fake gps,假GPS定位(Fake GPS Position) v4.5 安卓版_三毛不是三毛的博客-程序员秘密

Fake GPS Positio是一款能够将你手机的位置伪装到别的地方,不需要开启“允许模拟位置”。假的GPS位置,因此您可以张贴在使用手机的场所任何应用程序。该应用程序将覆盖您当前的位置和优雅的第三方应用程序会认为你是在巴黎下的艾菲尔铁塔或在纽约时代广场!你必须与你的朋友分享您的位置,但手机几乎是死的,无法找到您或GPS的精度是坏?或者你需要地理标记那些老照片?没问题,用我们的应用程序!请确保禁...

推荐文章

热门文章

相关标签