解决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 相关文章推荐
jquery中获得$.ajax()事件返回的值并添加事件的方法
Apr 15 Javascript
jquery序列化form表单使用ajax提交后处理返回的json数据
Mar 03 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
Mar 01 Javascript
vue-cli的webpack模板项目配置文件分析
Apr 01 Javascript
node打造微信个人号机器人的方法示例
Apr 26 Javascript
微信小程序画布圆形进度条显示效果
Nov 17 Javascript
JS多个表单数据提交下的serialize()应用实例分析
Aug 27 Javascript
element form 校验数组每一项实例代码
Oct 10 Javascript
基于form-data请求格式详解
Oct 29 Javascript
vue.js 实现a标签href里添加参数
Nov 12 Javascript
简单了解JavaScript弹窗实现代码
May 07 Javascript
Vue router安装及使用方法解析
Dec 02 Vue.js
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 foreach 使用&(与运算符)引用赋值要注意的问题
2010/02/16 PHP
php学习之数据类型之间的转换介绍
2011/06/09 PHP
php curl_init函数用法
2014/01/31 PHP
Laravel timestamps 设置为unix时间戳的方法
2019/10/11 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
PHP中isset、empty的用法与区别示例详解
2020/11/05 PHP
window.showModalDialog参数传递中含有特殊字符的处理方法
2013/06/06 Javascript
Javascript writable特性介绍
2015/02/27 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
2015/09/05 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
JS控件bootstrap datepicker使用方法详解
2017/03/25 Javascript
Angular4的输入属性与输出属性实例详解
2017/11/29 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
Python实现的批量下载RFC文档
2015/03/10 Python
python将unicode转为str的方法
2017/06/21 Python
django 创建过滤器的实例详解
2017/08/14 Python
聊聊Python中的pypy
2018/01/12 Python
mac 安装python网络请求包requests方法
2018/06/13 Python
python3将视频流保存为本地视频文件
2018/06/20 Python
Python实现的简单读写csv文件操作示例
2018/07/12 Python
Python 实现try重新执行
2019/12/21 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
Python更换pip源方法过程解析
2020/05/19 Python
Python中pass的作用与使用教程
2020/11/13 Python
CSS3毛玻璃效果(blur)有白边问题的解决方法
2016/11/15 HTML / CSS
Pottery Barn阿联酋:购买家具、家居装饰及更多
2019/12/08 全球购物
武汉高蓝德国际.net机试
2016/06/24 面试题
简短的公司员工自我评价分享
2013/11/13 职场文书
日语专业毕业生自荐书
2014/06/18 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
法人身份证明书
2014/10/08 职场文书
学校施工安全责任书
2015/01/29 职场文书
2016年寒假社会实践活动总结
2015/10/10 职场文书
MySQL安装后默认自带数据库的作用详解
2021/04/27 MySQL
无线电通信名词解释
2022/02/18 无线电
Python 中面向接口编程
2022/05/20 Python