解决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 相关文章推荐
VBScript版代码高亮
Jun 26 Javascript
基于jQuery的获得各种控件Value的方法
Nov 19 Javascript
jquery异步跨域访问代码
Jun 28 Javascript
JavaScript严格模式禁用With语句的原因
Oct 20 Javascript
基于JavaScript实现前端文件的断点续传
Oct 17 Javascript
jquery操作ID带有变量的节点实例
Dec 07 Javascript
JS实现留言板功能
Jun 17 Javascript
JS Input里添加小图标的两种方法
Nov 11 Javascript
修改vue+webpack run build的路径方法
Sep 01 Javascript
利用JavaScript将Excel转换为JSON示例代码
Jun 14 Javascript
layui-select动态选中值的例子
Sep 23 Javascript
JavaScript前端面试组合函数
Jun 21 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获取指定日期所在月的开始日期与结束日期
2013/08/01 PHP
php实现压缩合并js的方法【附demo源码下载】
2016/09/22 PHP
JS焦点图切换,上下翻转
2011/05/12 Javascript
jQuery插件实现屏蔽单个元素使用户无法点击
2013/04/12 Javascript
调用HttpHanlder的几种返回方式小结
2013/12/20 Javascript
javascript常见用法总结
2014/05/22 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
2016/01/10 Javascript
js获取所有checkbox的值的简单实例
2016/05/30 Javascript
AngularJs实现分页功能不带省略号的代码
2016/05/30 Javascript
第一次接触神奇的Bootstrap基础排版
2016/07/26 Javascript
利用JavaScript实现栈的数据结构示例代码
2017/08/02 Javascript
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
AngularJS 教程及实例代码
2017/10/23 Javascript
解决linux下node.js全局模块找不到的问题
2018/05/15 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
vue项目前端知识点整理【收藏】
2019/05/13 Javascript
原生js实现抽奖小游戏
2019/06/27 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
2019/07/15 Javascript
微信小程序的引导页实现代码
2020/06/24 Javascript
Python生成验证码实例
2014/08/21 Python
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
Python每天必学之bytes字节
2016/01/28 Python
Python解惑之整数比较详解
2017/04/24 Python
深入理解Django的中间件middleware
2018/03/14 Python
python高级特性和高阶函数及使用详解
2018/10/17 Python
python列表推导式入门学习解析
2019/12/02 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
基于SpringBoot构造器注入循环依赖及解决方式
2020/04/26 Python
Python bisect模块原理及常见实例
2020/06/17 Python
Python3.9.1中使用match方法详解
2021/02/08 Python
耐克波兰官方网站:Nike波兰
2019/09/03 全球购物
WebSphere面试题:在WebSphere里面如何部署一个应用
2015/08/02 面试题
应届大学毕业生找工作的求职信范文
2013/11/29 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
七一建党日演讲稿
2014/09/05 职场文书
mysql5.7的安装及Navicate长久免费使用的实现过程
2021/11/17 MySQL