解决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 相关文章推荐
ExtJs默认的字体大小改变的几种方法(自己整理)
Apr 18 Javascript
js函数在frame中的相互调用详解
Mar 03 Javascript
使用js判断TextBox控件值改变然后出发事件
Mar 07 Javascript
json中换行符的处理方法示例介绍
Jun 10 Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
Mar 13 Javascript
js动态创建及移除div的方法
Jun 03 Javascript
Bootstrap下拉菜单效果实例代码分享
Jun 30 Javascript
vue组件实例解析
Jan 10 Javascript
socket.io学习教程之基础介绍(一)
Apr 29 Javascript
详解微信小程序中组件通讯
Oct 30 Javascript
基于layPage插件实现两种分页方式浅析
Jul 27 Javascript
详解小程序横屏方案对比
Jun 28 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的分页功能
2007/03/21 PHP
PHP常用的文件操作函数经典收藏
2013/04/02 PHP
PHP SPL标准库之接口(Interface)详解
2015/05/11 PHP
php简单实现发送带附件的邮件
2015/06/10 PHP
PHP数据库连接mysql与mysqli对比分析
2016/01/04 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
PHP精确到毫秒秒杀倒计时实例详解
2019/03/14 PHP
对字符串进行HTML编码和解码的JavaScript函数
2010/02/01 Javascript
javascript:FF/Chrome与IE动态加载元素的区别说明
2014/01/26 Javascript
js变量、作用域及内存详解
2014/09/23 Javascript
jquery插件qrcode在线生成二维码
2015/04/26 Javascript
js实现仿Discuz文本框弹出层效果
2015/08/13 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
2015/08/17 Javascript
jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题
2016/08/15 Javascript
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
React Native 搭建开发环境的方法步骤
2017/10/30 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
2018/02/01 Javascript
使用webpack搭建pixi.js开发环境
2020/02/12 Javascript
javascript单张多张图无缝滚动实例代码
2020/05/10 Javascript
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
[01:30]DOTA2上海特锦赛现场采访 Loda倾情献唱
2016/03/25 DOTA
python多进程操作实例
2014/11/21 Python
11个并不被常用但对开发非常有帮助的Python库
2015/03/31 Python
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
Django REST framework视图的用法
2019/01/16 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
利用pandas向一个csv文件追加写入数据的实现示例
2020/04/23 Python
CSS3制作皮卡丘动画壁纸的示例
2020/11/02 HTML / CSS
AmazeUI框架搭建的方法步骤(图文)
2020/08/17 HTML / CSS
澳大利亚巧克力花束和礼品网站:Tastebuds
2019/03/15 全球购物
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
英国Iceland杂货店:网上食品购物
2020/12/16 全球购物
Linux Interview Questions For software testers
2013/05/17 面试题
2014年党员自我评议总结
2014/09/23 职场文书
公文格式,规则明细(新手收藏)
2019/07/23 职场文书
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
2021/05/22 Python