解决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 相关文章推荐
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
Nov 30 Javascript
仅IE不支持setTimeout/setInterval函数的第三个以上参数
May 25 Javascript
JQuery获取当前屏幕的高度宽度的实现代码
Jul 12 Javascript
JavaScript按位运算符的应用简析
Feb 04 Javascript
js面向对象编程之如何实现方法重载
Jul 02 Javascript
jQuery实现的输入框选择时间插件用法实例
Feb 28 Javascript
Javascript实现计算个人所得税
May 10 Javascript
javascript省市区三级联动下拉框菜单实例演示
Nov 29 Javascript
基于JS代码实现实时显示系统时间
Jun 16 Javascript
jquery 实现回车登录详解及实例代码
Oct 23 Javascript
基于JavaScript实现屏幕滚动效果
Jan 18 Javascript
js移动端图片压缩上传功能
Aug 18 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实现的MySQL通用查询程序
2007/03/11 PHP
php图片上传存储源码并且可以预览
2011/08/26 PHP
thinkphp浏览历史功能实现方法
2014/10/29 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
2015/03/19 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
PHP连接及操作PostgreSQL数据库的方法详解
2019/01/30 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
javascript编程起步(第四课)
2007/01/10 Javascript
Highslide.js是一款基于js实现的网页中图片展示插件
2020/03/30 Javascript
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
JS函数验证总结(方便js客户端输入验证)
2010/10/29 Javascript
JS中eval函数的使用示例
2013/07/21 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
Angularjs的ng-repeat中去除重复数据的方法
2016/08/05 Javascript
微信小程序中顶部导航栏的实现代码
2017/03/30 Javascript
简单实现jQuery弹窗效果
2017/10/30 jQuery
ReactNative中使用Redux架构总结
2017/12/15 Javascript
完美解决linux下node.js全局模块找不到的情况
2018/05/16 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
2018/09/18 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
2018/12/09 Javascript
用npm-run实现自动化任务的方法示例
2019/01/14 Javascript
vue实现的仿淘宝购物车功能详解
2019/01/27 Javascript
js实现的格式化数字和金额功能简单示例
2019/07/30 Javascript
JavaScript 实现继承的几种方式
2021/02/19 Javascript
Python中的zip函数使用示例
2015/01/29 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
用python实现刷点击率的示例代码
2019/02/21 Python
python快排算法详解
2019/03/04 Python
在keras中对单一输入图像进行预测并返回预测结果操作
2020/07/09 Python
Zooplus葡萄牙:欧洲领先的网上宠物商店
2018/07/01 全球购物
机修工岗位职责
2013/11/24 职场文书
合作意向书格式及范文
2014/03/31 职场文书
离婚案件答辩状
2015/05/22 职场文书
火烧圆明园的观后感
2015/06/03 职场文书
医院感染管理制度
2015/08/05 职场文书