解决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 相关文章推荐
JavaScript 序列化对象实现代码
Dec 18 Javascript
Array.prototype.slice.apply的使用方法
Mar 17 Javascript
25个非常棒的jQuery滑块插件和教程小结
Sep 02 Javascript
开发中可能会用到的jQuery小技巧
Mar 07 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
Aug 17 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
Nov 25 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
Jun 13 Javascript
vuex 项目结构目录及一些简单配置介绍
Apr 08 Javascript
Vue头像处理方案小结
Jul 26 Javascript
Vue 中 filter 与 computed 的区别与用法解析
Nov 21 Javascript
微信小程序修改checkbox的样式代码实例
Jan 21 Javascript
小程序实现图片移动缩放效果
May 26 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伪造referer的方法 利用referer防止图片盗链
2014/01/20 PHP
php简单实现发送带附件的邮件
2015/06/10 PHP
PHP实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
在laravel框架中实现封装公共方法全局调用
2019/10/14 PHP
jquery基础教程之数组使用详解
2014/03/10 Javascript
详解JS函数重载
2014/12/04 Javascript
在web中js实现类似excel的表格控件
2016/09/01 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
js Canvas绘制圆形时钟效果
2017/02/17 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
2017/03/02 Javascript
bootstrap treeview 树形菜单带复选框及级联选择功能
2018/06/08 Javascript
vue项目中播放rtmp视频文件流的方法
2020/09/17 Javascript
微信小程序实现点击页面出现文字
2020/09/21 Javascript
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
python技能之数据导出excel的实例代码
2017/08/11 Python
浅谈使用Python内置函数getattr实现分发模式
2018/01/22 Python
python实现求解列表中元素的排列和组合问题
2018/03/15 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
python最长回文串算法
2018/06/04 Python
python八皇后问题的解决方法
2018/09/27 Python
Python文件读写常见用法总结
2019/02/22 Python
python实现维吉尼亚加密法
2019/03/20 Python
wxPython+Matplotlib绘制折线图表
2019/11/19 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
JNI的定义
2012/11/25 面试题
实习期自我鉴定
2013/10/11 职场文书
事业单位竞聘上岗实施方案
2014/03/28 职场文书
新闻编辑求职信
2014/07/13 职场文书
竞选班长演讲稿500字
2014/08/22 职场文书
交通事故委托书范本精选
2014/10/04 职场文书
自我检讨书怎么写
2015/05/07 职场文书
校运会新闻稿
2015/07/17 职场文书
实习感想范文
2015/08/10 职场文书
大学生创业,为什么都会选择快餐饮?
2019/08/08 职场文书
Filebeat 采集 Nginx 日志的方法
2021/03/31 Servers