解决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 String 的扩展方法集合
Jun 01 Javascript
Javascript Tab 导航插件 (23个)
Jun 11 Javascript
JavaScript 继承详解(一)
Jul 13 Javascript
开发 Internet Explorer 右键功能表(ContextMenu)
Jul 03 Javascript
《JavaScript高级编程》学习笔记之object和array引用类型
Nov 01 Javascript
javascript日期验证之输入日期大于等于当前日期
Dec 13 Javascript
Javascript中的arguments对象
Jun 20 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(放大缩小)
Dec 02 Javascript
详解vue中axios的封装
Jul 18 Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
Nov 13 Javascript
jQuery创建折叠式菜单
Jun 15 jQuery
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
Oct 22 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守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
用PHP实现弹出消息提示框的两种方法
2013/12/17 PHP
Zend Framework教程之模型Model用法简单实例
2016/03/04 PHP
PHP7 整型处理机制修改
2021/03/09 PHP
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
JQuery扩展插件Validate 1 基本使用方法并打包下载
2011/09/05 Javascript
jQuery中ready事件用法实例
2015/01/19 Javascript
JavaScript控制网页层收起和展开效果的方法
2015/04/15 Javascript
6种javascript显示当前系统时间代码
2015/12/01 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
vue.js动态数据绑定学习笔记
2017/05/19 Javascript
react+redux的升级版todoList的实现
2017/12/18 Javascript
解决jquery有正确返回值但不执行success函数的问题
2018/08/20 jQuery
全面分析JavaScript 继承
2019/05/30 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
python pickle 和 shelve模块的用法
2013/09/16 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
2017/12/19 Python
Python实现嵌套列表去重方法示例
2017/12/28 Python
python利用小波分析进行特征提取的实例
2019/01/09 Python
Django用户认证系统 Web请求中的认证解析
2019/08/02 Python
Python vtk读取并显示dicom文件示例
2020/01/13 Python
Python集合操作方法详解
2020/02/09 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
一款利用纯css3实现的win8加载动画的实例分析
2014/12/11 HTML / CSS
酒店个人培训自我鉴定
2013/12/11 职场文书
数控技校生自我鉴定
2014/03/02 职场文书
人事任命书格式
2014/06/05 职场文书
工作检讨书怎么写
2015/01/23 职场文书
个人政治思想总结
2015/03/05 职场文书
辩护词格式
2015/05/22 职场文书
幼儿园卫生保健制度
2015/08/05 职场文书
军训后的感想
2015/08/07 职场文书
十大好看的穿越动漫排名:《瑞克和莫蒂》第一,国漫《有药》在榜
2022/03/18 日漫
MySql按时,天,周,月进行数据统计
2022/08/14 MySQL