解决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 字符串连接的性能问题(多浏览器)
Nov 18 Javascript
一个简单的弹性返回顶部JS代码实现介绍
Jun 09 Javascript
JavaScript File分段上传
Mar 10 Javascript
使用Javascript监控前端相关数据的代码
Oct 27 Javascript
ES6(ECMAScript 6)新特性之模板字符串用法分析
Apr 01 Javascript
vue实现百度搜索下拉提示功能实例
Jun 14 Javascript
jquery-file-upload 文件上传带进度条效果
Nov 21 jQuery
jquery ajax加载数据前台渲染方式 不用for遍历的方法
Aug 09 jQuery
详解如何使用nvm管理Node.js多版本
May 06 Javascript
解决vue v-for src 图片路径问题 404
Nov 12 Javascript
node.js中 mysql 增删改查操作及async,await处理实例分析
Feb 11 Javascript
layui实现显示数据表格、搜索和修改功能示例
Jun 03 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
mac下使用brew配置环境的步骤分享
2011/05/23 PHP
深入解析PHP内存管理之谁动了我的内存
2013/06/20 PHP
PHP随机字符串生成代码(包括大小写字母)
2013/06/24 PHP
PHP类中的魔术方法(Magic Method)简明总结
2014/07/08 PHP
PHP中异常处理的一些方法整理
2015/07/03 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
2015/07/31 PHP
BOOM vs RR BO5 第一场 2.14
2021/03/10 DOTA
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
2010/03/20 Javascript
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
javascript实现仿IE顶部的可关闭警告条
2015/05/05 Javascript
javascript淘宝主图放大镜功能
2016/10/20 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
JavaScript实现网页头部进度条刷新
2017/04/16 Javascript
基于ES6 Array.of的用法(实例讲解)
2017/09/05 Javascript
Bootstrap一款超好用的前端框架
2017/09/25 Javascript
用Vue.js方法创建模板并使用多个模板合成
2019/06/28 Javascript
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
深入了解Vue.js 混入(mixins)
2020/07/23 Javascript
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
Python运算符重载详解及实例代码
2017/03/07 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
Pyinstaller 打包exe教程及问题解决
2019/08/16 Python
对Python 中矩阵或者数组相减的法则详解
2019/08/26 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
Python filter()及reduce()函数使用方法解析
2020/09/05 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
布鲁明戴尔百货店:Bloomingdale’s
2016/12/21 全球购物
体育学院毕业生自荐信
2013/11/03 职场文书
30年同学聚会邀请函
2014/01/25 职场文书
社区活动邀请函范文
2014/01/29 职场文书
项目投资意向书范本
2015/05/09 职场文书
2015双创工作总结
2015/07/24 职场文书
Python3中PyQt5简单实现文件打开及保存
2021/06/10 Python