解决vue 给window添加和移除resize事件遇到的坑


Posted in Javascript onJuly 21, 2020

在vue项目中需要监听window窗口变化来时时计算图片的高度,于是就加了一个监听事件;确实监听到了,但是在离开当前页面进入其他页面改变窗口大小时发现window还是处于监听状态,即移除监听事件并没有生效。

//之前的写法,这样写移除监听事件无效
  mounted(){
    window.addEventListener('resize',()=>{
      '改变窗口大小时需要做的处理'
    });
  },
  beforeDestroy() {
    window.removeEventListener("resize");
  }

后来查找相关资料后发现用下面这种写法可以移除监听

methods: {
    listenResize(){
      '窗口大小改变时的操作'
    }
  },
  mounted(){
    window.addEventListener('resize',this.listenResize); 
  },
  beforeDestroy() {
    window.removeEventListener("resize",this.listenResize);
  }

补充知识:vue 监听屏幕变化 & 销毁监听事件

记一次小坑.

由于用到 echarts 需要自适应屏幕,所以在vue中用了监听事件并且考虑到性能问题,所以用lodash 库的 debounce 做了包裹.代码如下:

mounted() {
  window.addEventListener('resize', debounce(this.resize,200), true)
},
beforeDestroy() {
  window.removeEventListener('resize', this.resize, true)
},
methods: {
  resize() {
   this.radarChart.resize()
  }
}

然而发现切换到其他的页面的时候,屏幕改变的时候还是会触发 resize 事件,因为之前写过类似功能,代码是没有问题的,但是就是会触发,心里也是觉得奇怪,研究了一下,发现 addEventListener 的方法里面不加 debounce 就可以了.如下:

mounted() {
  window.addEventListener('resize', this.resize, true)
},
beforeDestroy() {
  window.removeEventListener('resize', this.resize, true)
},
methods: {
  resize: debounce(function() {
   this.radarChart.resize()
  }, 300),
 }

debounce 需要加在 methods 里面.并且内部函数体不能使用箭头函数,否则会报 this undefined 的问题

以上这篇解决vue 给window添加和移除resize事件遇到的坑就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
070823更新的一个[消息提示框]组件 兼容ie7
Aug 29 Javascript
初学Javascript的一些总结
Nov 03 Javascript
ASP.NET jQuery 实例5 (显示CheckBoxList成员选中的内容)
Jan 13 Javascript
js控制表单不能输入空格的小例子
Nov 20 Javascript
js 触发select onchange事件代码
Mar 20 Javascript
分享20个提升网站界面体验的jQuery插件
Dec 15 Javascript
jquery中关于bind()方法的使用技巧分享
Mar 30 jQuery
详解Vue整合axios的实例代码
Jun 21 Javascript
微信小程序实现动态显示和隐藏某个控件功能示例
Dec 14 Javascript
说说如何在Vue.js中实现数字输入组件的方法
Jan 08 Javascript
详解JavaScript中关于this指向的4种情况
Apr 18 Javascript
js在HTML的三种引用方式详解
Aug 29 Javascript
js实现带积分弹球小游戏
Jul 21 #Javascript
在vue中created、mounted等方法使用小结
Jul 21 #Javascript
解决vue的touchStart事件及click事件冲突问题
Jul 21 #Javascript
解决Vue 移动端点击出现300毫秒延迟的问题
Jul 21 #Javascript
解决Vue中的生命周期beforeDestory不触发的问题
Jul 21 #Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
Jul 21 #Javascript
vue 清空input标签 中file的值操作
Jul 21 #Javascript
You might like
PHP实现时间轴函数代码
2011/10/08 PHP
MySql数据库查询结果用表格输出PHP代码示例
2015/03/20 PHP
php通过前序遍历树实现无需递归的无限极分类
2015/07/10 PHP
PHP互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
JavaScript浏览器选项卡效果
2010/08/25 Javascript
javascript 设为首页与加入收藏兼容多浏览器代码
2011/01/11 Javascript
ParseInt函数参数设置介绍
2014/01/02 Javascript
JS之Date对象和获取系统当前时间详解
2014/01/13 Javascript
node.js中的http.response.write方法使用说明
2014/12/14 Javascript
Javascript基础教程之switch语句
2015/01/18 Javascript
js判断一个字符串是否包含一个子串的方法
2015/01/26 Javascript
Nodejs关于gzip/deflate压缩详解
2015/03/04 NodeJs
Labelauty?jQuery单选框/复选框美化插件分享
2015/09/26 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
2016/03/10 Javascript
AngularJs ng-route路由详解及实例代码
2016/09/14 Javascript
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
react native 仿微信聊天室实例代码
2019/09/17 Javascript
Javascript中Math.max和Math.max.apply的区别和用法详解
2020/08/24 Javascript
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
Python实现过滤单个Android程序日志脚本分享
2015/01/16 Python
浅谈Python爬取网页的编码处理
2016/11/04 Python
Python 查看文件的读写权限方法
2018/01/23 Python
TensorFlow 滑动平均的示例代码
2018/06/19 Python
利用python打开摄像头及颜色检测方法
2018/08/03 Python
python 函数中的内置函数及用法详解
2019/07/02 Python
加热夹克:RAVEAN
2018/10/19 全球购物
Oracle性能调优原则
2012/05/03 面试题
如何现实servlet的单线程模式
2014/08/05 面试题
优秀老师事迹材料
2014/02/05 职场文书
环保倡议书50字
2014/05/15 职场文书
学生会感恩节活动方案
2014/10/11 职场文书
保密工作整改情况汇报
2014/11/06 职场文书
汽车修理厂管理制度
2015/08/05 职场文书
我的中国梦心得体会范文
2016/01/05 职场文书
十大最强飞行系宝可梦,BUG燕上榜,第二是飞行系王者
2022/03/18 日漫