解决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初学者需要了解10个小技巧
Aug 25 Javascript
web性能优化之javascript性能调优
Dec 28 Javascript
Javascript call和apply区别及使用方法
Nov 14 Javascript
jQuery结合CSS制作动态的下拉菜单
Oct 27 Javascript
jquery实现图片预加载
Dec 25 Javascript
Node.js中用D3.js的方法示例
Jan 16 Javascript
angularjs实现上拉加载和下拉刷新数据功能
Jun 12 Javascript
jquery实现回车键触发事件(实例讲解)
Nov 21 jQuery
vue.js仿hover效果的实现方法示例
Jan 28 Javascript
Vue CLI 2.x搭建vue(目录最全分析)
Feb 27 Javascript
利用原生JavaScript实现造日历轮子实例代码
May 08 Javascript
koa-router路由参数和前端路由的结合详解
May 19 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性能的原理介绍
2012/09/05 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
2014/07/10 PHP
PHP中的switch语句的用法实例详解
2015/10/21 PHP
PHP入门教程之上传文件实例详解
2016/09/11 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
TP5多入口设置实例讲解
2020/12/15 PHP
ExtJS下grid的一些属性说明
2009/12/13 Javascript
查找Oracle高消耗语句的方法
2014/03/22 Javascript
jQuery使用模式窗口实现在主页面和子页面中互相传值的方法
2016/03/01 Javascript
AngularJS入门教程之AngularJS指令
2016/04/18 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
JavaScript中的冒泡排序法
2016/08/03 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
2020/04/23 Javascript
jquery组件WebUploader文件上传用法详解
2020/10/23 Javascript
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
2017/11/22 Javascript
Vue调试神器vue-devtools安装方法
2017/12/12 Javascript
JavaScript事件发布/订阅模式原理与用法分析
2018/08/21 Javascript
Vue学习之常用指令实例详解
2020/01/06 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
通过滑动翻页效果实现和移动端click事件问题
2021/01/26 Javascript
Python中利用函数装饰器实现备忘功能
2015/03/30 Python
Python实现数通设备端口使用情况监控实例
2015/07/15 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
2018/05/26 Python
Pytorch实现神经网络的分类方式
2020/01/08 Python
python 使用openpyxl读取excel数据
2021/02/18 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
前端实现背景虚化但内容清晰且自适应 的实例代码
2019/08/01 HTML / CSS
翻新二手苹果产品的网络领导者:Mac of all Trades
2017/12/19 全球购物
德国药房apodiscounter中文官网:德国排名前三的网上药店
2019/06/03 全球购物
介绍一下Ruby的特点
2013/01/20 面试题
自我评价范文点评
2013/12/04 职场文书
创业计划书怎样才能打动风投
2014/01/01 职场文书
母亲节感恩寄语
2014/02/21 职场文书
装修施工安全责任书
2014/07/24 职场文书
2015年安全教育月活动总结
2015/03/26 职场文书