解决Vue中mounted钩子函数获取节点高度出错问题


Posted in Javascript onMay 18, 2018

遇到的问题

最近在开发一个Vue的项目,好几个页面都有用到一个 页面楼层滑动的组件,我就直接封装成了一个,但是遇到一个bug,就是我需要得到这个组件的offsetTop,然后页面滚动到这个位置的时候,就设置position属性为fixed,让他固定在屏幕上。问题是当我在mounted钩子函数中获取offsetTop的时候,在新开的页签中打开页面,会得到错误的offsetTop,但是在当前页面刷新,就不会有问题。

定位问题

后来查到问题,就是加载的问题,新窗口打开图片,默认是没有带缓存的,图片是GET请求,是异步的,js运行的肯定比图片GET要快,所以当执行mounted钩子函数的时候,图片还没有全部加载完,这时候就会得到一个错误的offsetTop。

解决方案

给图片加上ref属性,并在那个组件里的mounted钩子函数中写,

this.$refs.img.onload = ()=>{
Bus.$emit('loadImgSuccess')
}

这里的Bus是用的EventBus,两个组件中事件响应的办法,不懂或者感兴趣的可以点这里EventBus。
需要得到offsetTop的组件里面

Bus.$on('loadImgSuccess', () => {
var offsetTop = this.$refs.dom.offsetTop 
})

这时候就可以确认每次不管是页面新打开还是当前页刷新都可以得到正确的offsetTop。

Javascript 相关文章推荐
jQuery的学习步骤
Feb 23 Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
Jul 11 Javascript
jQuery中的height innerHeight outerHeight区别示例介绍
Jun 15 Javascript
js实现select跳转功能代码
Oct 22 Javascript
学习Bootstrap组件之下拉菜单
Jul 28 Javascript
jquery基础知识第一讲之认识jquery
Mar 17 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
Sep 14 Javascript
深入理解requestAnimationFrame的动画循环
Sep 20 Javascript
详解本地Node.js服务器作为api服务器的解决办法
Feb 28 Javascript
JavaScript实现动态增删表格的方法
Mar 09 Javascript
Web前端框架Angular4.0.0 正式版发布
Mar 28 Javascript
Angular2平滑升级到Angular4的步骤详解
Mar 29 Javascript
Vue数据双向绑定原理及简单实现方法
May 18 #Javascript
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
May 17 #Javascript
Vue中对比scoped css和css module的区别
May 17 #Javascript
vue引用js文件的多种方式(推荐)
May 17 #Javascript
vue router+vuex实现首页登录验证判断逻辑
May 17 #Javascript
浅谈webpack-dev-server的配置和使用
May 17 #Javascript
Node.js模块全局安装路径配置方法
May 17 #Javascript
You might like
php上传大文件失败的原因及应对策略
2015/10/20 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
适合PHP初学者阅读的4本经典书籍
2016/09/23 PHP
PHP实现登陆表单提交CSRF及验证码
2017/01/24 PHP
Smarty模板类内部原理实例分析
2019/07/03 PHP
jquery+json 通用三级联动下拉列表
2010/04/19 Javascript
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
2010/08/12 Javascript
用js来定义浏览器中一个左右浮动元素相对于页面主体宽度的位置的函数
2012/01/21 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
2014/06/23 Javascript
jQuery实现冻结表格行和列
2015/04/29 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
JS中关于正则的巧妙操作
2017/08/31 Javascript
JS实现获取进今年第几天是周几的方法分析
2018/06/27 Javascript
微信小程序实现左侧滑动导航栏
2020/04/08 Javascript
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
Python正则表达式教程之三:贪婪/非贪婪特性
2017/03/02 Python
Python Socket使用实例
2017/12/18 Python
对Python中内置异常层次结构详解
2018/10/18 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
2020/05/09 Python
pytorch 限制GPU使用效率详解(计算效率)
2020/06/27 Python
实例代码讲解Python 线程池
2020/08/24 Python
python爬虫scrapy框架之增量式爬虫的示例代码
2021/02/26 Python
Manduka官网:瑜伽垫、瑜伽毛巾和服装
2018/07/02 全球购物
Oral-B荷兰:牙医最推荐的品牌
2020/02/25 全球购物
入党思想汇报
2014/01/05 职场文书
承诺书模板
2014/08/30 职场文书
自我查摆剖析材料
2014/10/11 职场文书
四风批评与自我批评范文
2014/10/14 职场文书
降价通知函
2015/04/23 职场文书
2015年公司工作总结
2015/04/25 职场文书
会议简报格式范文
2015/07/20 职场文书
清明节随笔
2015/08/15 职场文书
《小乌鸦爱妈妈》教学反思
2016/02/19 职场文书
Python使用scapy模块发包收包
2021/05/07 Python
opencv检测动态物体的实现
2021/07/21 Python