解决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 相关文章推荐
js几个不错的函数 $$()
Oct 09 Javascript
js 距离某一时间点时间是多少实现代码
Oct 14 Javascript
javascript实现的猜数小游戏完整实例代码
May 10 Javascript
Vue.js每天必学之内部响应式原理探究
Sep 07 Javascript
原生JS实现《别踩白块》游戏(兼容IE)
Feb 20 Javascript
Vue + Vue-router 同名路由切换数据不更新的方法
Nov 20 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
Jan 27 Javascript
小程序实现多列选择器
Feb 15 Javascript
Layui数据表格之单元格编辑方式
Oct 26 Javascript
Python版实现微信公众号扫码登陆
May 28 Javascript
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
Jun 01 Javascript
原生js实现表格翻页和跳转
Sep 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中创建和调用webservice接口示例
2014/07/25 PHP
php parse_str() 函数的定义和用法
2016/05/23 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
2017/04/01 PHP
JS OOP包机制,类创建的方法定义
2009/11/02 Javascript
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
改变javascript函数内部this指针指向的三种方法
2010/04/23 Javascript
js对table的td进行相同内容合并示例详解
2013/12/27 Javascript
js 3秒后跳转页面的实现代码
2014/03/10 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
js实现按钮颜色渐变动画效果
2015/08/20 Javascript
Vue 仿百度搜索功能实现代码
2017/02/16 Javascript
无循环 JavaScript(map、reduce、filter和find)
2017/04/08 Javascript
微信小程序 button样式设置为图片的方法
2020/06/19 Javascript
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
python分析apache访问日志脚本分享
2015/02/26 Python
python开发之for循环操作实例详解
2015/11/12 Python
Python 使用PIL numpy 实现拼接图片的示例
2018/05/08 Python
Python 利用pydub库操作音频文件的方法
2019/01/09 Python
pandas ix &iloc &loc的区别
2019/01/10 Python
Python 中的 global 标识对变量作用域的影响
2019/08/12 Python
Python closure闭包解释及其注意点详解
2019/08/28 Python
python爬虫之遍历单个域名
2019/11/20 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
浅析Python迭代器的高级用法
2020/07/16 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
一款css实现的鼠标经过按钮的特效
2014/09/11 HTML / CSS
C++面试题:关于链表和指针
2013/06/05 面试题
node中使用shell脚本的方法步骤
2021/03/23 Javascript
2014年9.18纪念日演讲稿
2014/09/14 职场文书
“四风”查摆问题自我剖析材料
2014/09/27 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
学困生转化工作总结
2015/08/13 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
Windows Server 2012 R2服务器安装与配置的完整步骤
2022/07/15 Servers