解决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 相关文章推荐
对联广告js flash激活
Oct 19 Javascript
javascript页面动态显示时间变化示例代码
Dec 18 Javascript
在浏览器中打开或关闭JavaScript的方法
Jun 03 Javascript
实例讲解避免javascript冲突的方法
Jan 03 Javascript
避免jQuery名字冲突 noConflict()方法
Jul 30 Javascript
Bootstrap CSS使用方法
Dec 23 Javascript
jquery submit()不能提交表单的解决方法
Apr 24 jQuery
浅谈webpack 自动刷新与解析
Apr 09 Javascript
JS实现根据指定值删除数组中的元素操作示例
Aug 02 Javascript
详解如何配置vue-cli3.0的vue.config.js
Aug 23 Javascript
js+h5 canvas实现图片验证码
Oct 11 Javascript
VUE中的v-if与v-show区别介绍
Mar 13 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日历[测试通过]
2008/03/27 PHP
PHP 反射机制实现动态代理的代码
2008/10/22 PHP
写php分页时出现的Fatal error的解决方法
2011/04/18 PHP
简单的php文件上传(实例)
2013/10/27 PHP
PHP生成树的方法
2015/07/28 PHP
php rsa 加密,解密,签名,验签详解
2016/12/06 PHP
PHP registerXPathNamespace()函数讲解
2019/02/03 PHP
为jQuery增加join方法的实现代码
2010/11/28 Javascript
再论Javascript的类继承
2011/03/05 Javascript
js DOM的学习笔记
2011/12/22 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
Jquery实现图片预加载与延时加载的方法
2014/12/22 Javascript
JQuery+Ajax实现数据查询、排序和分页功能
2015/09/27 Javascript
JavaScript继承模式粗探
2016/01/12 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
微信小程序实现之手势锁功能实例代码
2018/07/19 Javascript
浅谈VUE单页应用首屏加载速度优化方案
2018/08/28 Javascript
JS定义函数的几种常用方法小结
2019/05/23 Javascript
vue3.0 上手体验
2020/09/21 Javascript
python进阶教程之异常处理
2014/08/30 Python
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
2015/04/25 Python
Python爬取APP下载链接的实现方法
2016/09/30 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
2018/04/28 Python
python实现while循环打印星星的四种形状
2019/11/23 Python
Python timeit模块的使用实践
2020/01/13 Python
python 操作mysql数据中fetchone()和fetchall()方式
2020/05/15 Python
W Concept美国:精选全球独立设计师
2017/02/22 全球购物
优衣库美国官网:UNIQLO美国
2018/04/14 全球购物
抽象类和接口的区别
2012/09/19 面试题
个人租房协议书
2014/11/28 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书
安全生产培训心得体会
2016/01/18 职场文书
学习习近平主席讲话心得体会
2016/01/20 职场文书
开网店计划分析
2019/07/30 职场文书
Nginx如何获取自定义请求header头和URL参数详解
2022/07/23 Servers