解决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 相关文章推荐
文本框回车提交与禁止提交示例
Sep 27 Javascript
探讨js中的双感叹号判断
Nov 11 Javascript
javascript作用域、作用域链(菜鸟必看)
Jun 16 Javascript
jQuery+ajax读取并解析XML文件的方法
Sep 09 Javascript
React实现点击删除列表中对应项
Jan 10 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
May 23 Javascript
Angular2 组件交互实例详解
Aug 24 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
Jan 04 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
Jan 07 Javascript
H5+C3+JS实现五子棋游戏(AI篇)
May 28 Javascript
小程序实现锚点滑动效果
Sep 23 Javascript
vue实现两个组件之间数据共享和修改操作
Nov 12 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制作静态网站的模板框架(四)
2006/10/09 PHP
php实现三级级联下拉框
2016/04/17 PHP
JavaScript 闭包深入理解(closure)
2009/05/27 Javascript
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
一行代码实现纯数据json对象的深度克隆实现思路
2013/01/09 Javascript
jQuery取id有.的值的方法
2014/05/21 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
2015/03/12 Javascript
js日期插件dateHelp获取本月、三个月、今年的日期
2016/03/07 Javascript
js 求时间差的实现代码
2016/04/26 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
Bootstarp 基础教程之表单部分实例代码
2017/02/03 Javascript
AngularJS动态绑定ng-options的ng-model实例代码
2017/06/21 Javascript
Angular通过angular-cli来搭建web前端项目的方法
2017/07/27 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
微信jssdk逻辑在vue中的运用详解
2018/11/14 Javascript
详解Vue项目中实现锚点定位
2019/04/24 Javascript
对TypeScript库进行单元测试的方法
2019/07/18 Javascript
微信小程序实现签字功能
2019/12/23 Javascript
初学Python实用技巧两则
2014/08/29 Python
python各种语言间时间的转化实现代码
2016/03/23 Python
基于python的字节编译详解
2017/09/20 Python
python中pylint使用方法(pylint代码检查)
2018/04/06 Python
在python中将字符串转为json对象并取值的方法
2018/12/31 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
浅谈Django+Gunicorn+Nginx部署之路
2019/09/11 Python
Pandas-Cookbook 时间戳处理方式
2019/12/07 Python
python类中super() 的使用解析
2019/12/19 Python
Python学习之路安装pycharm的教程详解
2020/06/17 Python
selenium自动化测试入门实战
2020/12/21 Python
HTML5边玩边学(2)基础绘图实现方法
2010/09/21 HTML / CSS
介绍一下linux的文件系统
2012/03/20 面试题
酒店管理毕业生自荐信
2013/10/24 职场文书
2014年大堂经理工作总结
2014/11/21 职场文书
自主招生自荐信格式
2015/03/04 职场文书
2015年路政工作总结
2015/05/22 职场文书
浅析python中特殊文件和特殊函数
2022/02/24 Python