效果图如下所示

.html

今日热门
今日热销

.js

mounted(){

window.addEventListener('scroll',this.handleScrollx,true)

},

methods: {

handleScrollx() {

console.log('滚动高度',window.pageYOffset)

console.log('距离顶部高度',this.$refs.pronbit.getBoundingClientRect().top)

},

}

补充知识:Vue异步更新队列 及 $nextTick的使用

问题一:什么是$nextTick?

简单回答:

因为Vue的异步更新队列,$nextTick是用来知道什么时候DOM更新完成的。

详细解读:

我们先来看这样一个场景:有一个div,默认用 v-if 将它隐藏,点击一个按钮后,改变 v-if 的值,让它显示出来,同时拿到这个div的文本内容。如果v-if的值是 false,直接去获取div内容是获取不到的,因为此时div还没有被创建出来,那么应该在点击按钮后,改变v-if的值为 true,div才会被创建,此时再去获取,示例代码如下:

这是一段文本

获取div内容

var app = new Vue({

el : "#app",

data:{

showDiv : false

},

methods:{

getText:function(){

this.showDiv = true;

var text = document.getElementById('div').innnerHTML;

console.log(text);

}

}

})

这段代码并不难理解,但是运行后在控制台会抛出一个错误:Cannot read property 'innnerHTML of null,意思就是获取不到div元素。这里就涉及Vue一个重要的概念:异步更新队列。

异步更新队列

Vue在观察到数据变化时并不是直接更新DOM,而是开启一个队列,并缓冲在同一个事件循环中发生的所有数据改变。在缓冲时会去除重复数据,从而避免不必要的计算和DOM操作。然后,在下一个事件循环tick中,Vue刷新队列并执行实际(已去重的)工作。所以如果你用一个for循环来动态改变数据100次,其实它只会应用最后一次改变,如果没有这种机制,DOM就要重绘100次,这固然是一个很大的开销。

Vue会根据当前浏览器环境优先使用原生的Promise.then和MutationObserver,如果都不支持,就会采用setTimeout代替。

知道了Vue异步更新DOM的原理,上面示例的报错也就不难理解了。事实上,在执行this.showDiv = true时,div仍然还是没有被创建出来,直到下一个vue事件循环时,才开始创建。$nextTick就是用来知道什么时候DOM更新完成的,所以上面的示例代码需要修改为:

这是一段文本

获取div内容

var app = new Vue({

el : "#app",

data:{

showDiv : false

},

methods:{

getText:function(){

this.showDiv = true;

this.$nextTick(function(){

var text = document.getElementById('div').innnerHTML;

console.log(text);

});

}

}

})

这时再点击事件,控制台就打印出div的内容“这是一段文本“了。

理论上,我们应该不用去主动操作DOM,因为Vue的核心思想就是数据驱动DOM,但在很多业务里,我们避免不了会使用一些第三方库,比如 popper.js、swiper等,这些基于原生javascript的库都有创建和更新及销毁的完整生命周期,与Vue配合使用时,就要利用好$nextTick。

以上这篇VUE实时监听元素距离顶部高度的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

vue获取元素距离页面顶部的距离_VUE实时监听元素距离顶部高度的操作相关推荐

  1. vue动态获取元素距离页面顶部的高度_VUE如何实时监听元素距离顶部高度

    VUE如何实时监听元素距离顶部高度 发布时间:2020-07-30 09:09:43 来源:亿速云 阅读:150 作者:小猪 这篇文章主要讲解了VUE如何实时监听元素距离顶部高度,内容清晰明了,对此有 ...

  2. vue图片宽高自适应_Echarts图标宽度变成100px,让图表宽度随着父元素自动适应,Vue实时监听宽度的变化,这可能是史上最好的解决方案!...

    源码解读:当Echarts绘制图表计算宽度的时候,由于初始化图表设置为display: none,所以无法获取到clientWidth,而 parseInt(stl.width, 10)) 将widt ...

  3. Vue 设置overflow: auto 后监听滚动距离

    overflow: auto 后监听滚动距离 <div class="page-body-inner" @scroll.passive="getScroll($ev ...

  4. js如何监听元素事件是否被移除_JavaScript 监听元素是否进入/移出可视区域

    JavaScript 监听元素是否进入/移出可视区域 常规操作 防抖节流 IntersectionObserver 兼容的代码 常规操作 通常的做法是,监听srcoll事件,根据元素的offset来判 ...

  5. php监听input,jQuery如何实时监听获取input输入框的值

    jQuery实时监听获取input输入框的值,在我们日常web项目开发也常需要去实现这样的功能效果.为了作出即时动作去引导浏览者,以便提高网站的用户体验感. 下面我们就结合具体的代码示例,为大家介绍j ...

  6. 实时监听div,input内容改变并获取值(包括脚本动态添加)

    在DOM中可以通过DOMNodeInserted和DOMNodeRemoved这两个事件来监视DOM元素的插入和移除. <!doctype html> <html lang=&quo ...

  7. jquery 监听元素滚动_jQuery在滚动时保持元素在视图中

    jquery 监听元素滚动 关于如何使元素保持可见的jQuery快速代码段. 为使演示向下滚动到博客上的任何页面并在右侧栏中显示广告,在您向下滚动页面时,它们仍处于查看状态. 然后,当您再次向上滚动时 ...

  8. vue 组件属性监听_Vue.js 监听属性

    # Vue.js 监听属性 本章节,我们将为大家介绍 Vue.js 监听属性 watch,我们可以通过 watch 来响应数据的变化: ~~~ Vue 测试实例 - 菜鸟教程(runoob.com) ...

  9. JS实时监听DOM元素变化 - MutationObserver

    使用 MutationObserver API实时监听DOM元素变化 创建 MutationObserver 实列,接受一个用于监听到DOM元素变化的回调函数 const handleListenCh ...

最新文章

  1. php定义常量mypi 3.14,php – Codeigniter 3使用未定义的常量VIEWPATH – 假设’VIEWPATH’...
  2. Linux学习(五)---开机、重启和用户登录注销
  3. 【OpenCV入门指南】第五篇轮廓检测 下
  4. odu oracle 价格_Oracle数据库ODU的几种恢复场景
  5. 如何快速上手一款开源软件
  6. 你所忽略的,覆盖equals时需要注意的事项《effective java》
  7. java: 程序包com.github.pagehelper不存在_Rust语言正在兴起,Java、Python、C的末日来临?...
  8. 理论基础 —— 栈 —— 链栈
  9. ❤️Java面试高频《注解与反射》(建议收藏)❤️
  10. 点云的密度 曝光时间_200倍的提速!华人博士生提出大场景三维点云语义分割新框架...
  11. 微星主板不用DrMOS了?
  12. mysql SQL语句分析工具_MySQL 数据库中SQL语句执行分析优化工具Explain使用说明 | IT工程师的生活足迹...
  13. 《终极算法》阅读笔记与摘要(1)-序和第1-2章
  14. 播布客的视频讲座-下载(持续更新2011-12-31)
  15. notion 纪念日公式
  16. 电子学推动计算机产业,自旋电子学和计算机硬件产业!-物理杂志.PDF
  17. 正雅齿科运用新数字技术为正畸行业开辟新空间
  18. 内网用户通过域名或公网IP访问内部服务器的解决办法
  19. 写给小白:AWS,开启新世界大门的钥匙
  20. 3.4 jest使用pug

热门文章

  1. python 股票指标库talib_TaLib在股票技术分析中的应用
  2. JavaBean的get、set方法生成器
  3. android.os.binderproxy cannot be cast to,Android服务android.os.BinderProxy错误
  4. java上传视频代码下载_java 实现视频上传
  5. centos mysql 启动_MYSQL在centos上首次启动
  6. inlfuxdb版本_InfluxDB和MySQL的读写对比测试
  7. python题库选择填空_python练习题4.18猴子选大王
  8. 机器学习-cs229-线性回归-泰勒展开法
  9. ajax 与route的区别,浅析vue-router jquery和params传参(接收参数)$router $route的区别
  10. AI有道干货 --- 126 篇 AI 原创文章精选(ML、DL、资源、教程)