解决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写的日历(代码部分网摘)
Sep 20 Javascript
浅析js封装和作用域
Jul 09 Javascript
快速解决jQuery与其他库冲突的方法介绍
Jan 02 Javascript
JavaScript操作Cookie详解
Feb 28 Javascript
用javascript实现自动输出网页文本
Jul 30 Javascript
js实现图片无缝滚动
Dec 23 Javascript
javascript闭包概念简单解析(推荐)
Jun 03 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
Sep 13 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
Sep 20 Javascript
js弹出窗口简单实现代码
Mar 22 Javascript
vue.js中npm安装教程图解
Apr 10 Javascript
使用vuex存储用户信息到localStorage的实例
Nov 11 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+MySQL5.0中文乱码解决方法
2006/11/20 PHP
php简单封装了一些常用JS操作
2007/02/25 PHP
利用php递归实现无限分类 格式化数组的详解
2013/06/08 PHP
Thinkphp中数据按分类嵌套循环实现方法
2014/10/30 PHP
PHP魔术方法__GET、__SET使用实例
2014/11/25 PHP
php实现两表合并成新表并且有序排列的方法
2014/12/05 PHP
CI(Codeigniter)的Setting增强配置类实例
2016/01/06 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2020/01/22 PHP
javaScript parseInt字符转化为数字函数使用小结
2009/11/05 Javascript
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
JavaScript中的style.display属性操作
2013/03/27 Javascript
jQuery中prependTo()方法用法实例
2015/01/08 Javascript
jquery插件NProgress.js制作网页加载进度条
2015/06/05 Javascript
javascript生成不重复的随机数
2015/07/17 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
Javascript 正则表达式校验数字的简单实例
2016/11/02 Javascript
JS实现的简易拖放效果示例
2016/12/29 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
解决canvas画布使用fillRect()时高度出现双倍效果的问题
2017/08/03 Javascript
浅谈React和Redux的连接react-redux
2017/12/04 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
vue实现页面切换滑动效果
2020/06/29 Javascript
jQuery实现简单评论功能
2020/08/19 jQuery
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
Windows上使用Python增加或删除权限的方法
2018/04/24 Python
PyTorch的深度学习入门教程之构建神经网络
2019/06/27 Python
python读取excel数据并且画图的实现示例
2021/02/08 Python
Ticketmaster德国票务网站:购买音乐会和体育等门票
2016/11/14 全球购物
公务员综合考察材料
2014/02/01 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书
2016年第十九届推普周活动总结
2016/04/06 职场文书
如何创建一个创建MySQL数据库中的datetime类型
2022/03/21 MySQL