解决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调用堆栈及setTimeout使用方法深入剖析
Feb 16 Javascript
JavaScript中读取和保存文件实例
May 08 Javascript
使用JS画图之点、线、面
Jan 12 Javascript
利用js实现禁止复制文本信息
Jun 03 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
Aug 09 Javascript
Vue.js每天必学之方法与事件处理器
Sep 06 Javascript
jquery二级目录选中当前页的css样式
Dec 08 Javascript
js实现带三角符的手风琴效果
Mar 01 Javascript
利用JavaScript实现栈的数据结构示例代码
Aug 02 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
Apr 29 Javascript
js删除指定位置超链接中含有百度与360的标题
Jan 06 Javascript
Vue如何实现组件间通信
May 15 Vue.js
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
根德YB400的电路分析
2021/03/02 无线电
ThinkPHP框架整合微信支付之JSAPI模式图文详解
2019/04/09 PHP
js截取固定长度的中英文字符的简单实例
2013/11/22 Javascript
使用jquery解析XML示例代码
2014/09/05 Javascript
JQuery中节点遍历方法实例
2015/05/18 Javascript
最新最热最实用的15个jQuery插件汇总
2015/07/05 Javascript
js实现tab切换效果实例
2015/09/16 Javascript
复杂的javascript窗口分帧解析
2016/02/19 Javascript
javascript冒泡排序小结
2016/04/10 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
Google 地图类型详解及示例代码
2016/08/06 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
JavaScript中正则表达式判断匹配规则及常用方法
2017/08/03 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
JQuery表单元素取值赋值方法总结
2020/05/12 jQuery
Python中创建二维数组
2018/10/17 Python
Python 常用模块 re 使用方法详解
2019/06/06 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
2019/08/23 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
2020/03/03 Python
Python 使用 PyQt5 开发的关机小工具分享
2020/07/16 Python
给水排水工程专业毕业生推荐信
2013/10/28 职场文书
咖啡厅创业计划书范本
2014/01/22 职场文书
《玩具柜台前的孩子》教学反思
2014/02/13 职场文书
高级销售求职信
2014/02/21 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
2015高考寄语集锦
2015/02/27 职场文书
68句权威创业名言
2019/08/26 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书
redis protocol通信协议及使用详解
2022/07/15 Redis