解决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 相关文章推荐
关于Javascript 的 prototype问题。
Jan 03 Javascript
js与jquery中获取当前鼠标的x、y坐标位置的代码
May 23 Javascript
js改变img标签的src属性在IE下没反应的解决方法
Jul 23 Javascript
Js制作简单弹出层DIV在页面居中 中间显示遮罩的具体方法
Aug 08 Javascript
jQuery动态添加删除select项(实现代码)
Sep 03 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
Jun 08 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
Dec 06 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
Jan 04 Javascript
jquery Form轻松实现文件上传
May 24 jQuery
bootstrap是什么_动力节点Java学院整理
Jul 14 Javascript
axios携带cookie配置详解(axios+koa)
Dec 28 Javascript
Vue 组件复用多次自定义参数操作
Jul 27 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 接口类与抽象类的实际作用
2009/11/26 PHP
PHP基于工厂模式实现的计算器实例
2015/07/16 PHP
php在数据库抽象层简单使用PDO的方法
2015/11/03 PHP
php实现简单爬虫的开发
2016/03/28 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
2017/02/08 PHP
JavaScript 字符串与数组转换函数[不用split与join]
2009/12/13 Javascript
jQuery中append、insertBefore、after与insertAfter的简单用法与注意事项
2020/04/04 Javascript
js过滤HTML标签以及空格的思路及代码
2013/05/24 Javascript
js日期联动示例
2014/05/02 Javascript
JavaScript操作Cookie方法实例分析
2015/05/27 Javascript
jQuery往返城市和日期查询实例讲解
2015/10/09 Javascript
Jquery ajax基础教程
2015/11/20 Javascript
js省市联动效果完整实例代码
2015/12/09 Javascript
ES6基础之展开语法(Spread syntax)
2019/02/21 Javascript
使用apifm-wxapi模块中的问题及解决方法
2019/08/05 Javascript
[49:08]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[42:32]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.27
2020/12/01 DOTA
Python最基本的输入输出详解
2015/04/25 Python
python通过smpt发送邮件的方法
2015/04/30 Python
python+pandas+时间、日期以及时间序列处理方法
2018/07/10 Python
Python生成rsa密钥对操作示例
2019/04/26 Python
基于python-pptx库中文文档及使用详解
2020/02/14 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
Python如何创建装饰器时保留函数元信息
2020/08/07 Python
python实现图片转字符画
2021/02/19 Python
详解纯CSS3制作的20种loading动效
2017/07/05 HTML / CSS
web页面录屏实现
2019/02/12 HTML / CSS
美国知名的时尚购物网站:Anthropologie
2016/12/22 全球购物
Abbacino官网:包、钱包和女士配饰
2019/04/15 全球购物
小学生期末自我鉴定
2014/01/19 职场文书
学生评语大全
2014/04/18 职场文书
婚前保证书
2014/04/29 职场文书
应急管理培训方案
2014/06/12 职场文书
MySQL中日期型单行函数代码详解
2021/06/21 MySQL
利用Python实现Picgo图床工具
2021/11/23 Python
css常用字体属性与背景属性介绍
2022/02/28 HTML / CSS