解决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 相关文章推荐
[HTML/CSS/Javascript]WWTJS
Sep 25 Javascript
jsTree树控件(基于jQuery, 超强悍)[推荐]
Sep 01 Javascript
推荐30个新鲜出炉的精美 jQuery 效果
Mar 26 Javascript
关闭ie窗口清除Session的解决方法
Jan 10 Javascript
jQuery Ajax 全局调用封装实例代码详解
Jun 02 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
Sep 17 Javascript
Bootstrap超大屏幕的实现代码
Mar 22 Javascript
理解 JavaScript EventEmitter
Mar 29 Javascript
vue 巧用过渡效果(小结)
Sep 22 Javascript
如何手动实现es5中的bind方法详解
Dec 07 Javascript
Vue父子组件传值的一些坑
Sep 16 Javascript
jQuery实现动态操作table行
Nov 23 jQuery
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
全国FM电台频率大全 - 7 吉林省
2020/03/11 无线电
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
九种js弹出对话框的方法总结
2013/03/12 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
2016/07/14 Javascript
Nodejs进阶:基于express+multer的文件上传实例
2016/11/21 NodeJs
JavaScript正则表达式替换字符串中图片地址(img src)的方法
2017/01/13 Javascript
js遮罩效果制作弹出注册界面效果
2017/01/25 Javascript
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
2017/03/21 Javascript
jQuery实现动态添加、删除按钮及input输入框的方法
2017/04/27 jQuery
Vue的MVVM实现方法
2017/08/16 Javascript
AjaxUpLoad.js实现文件上传
2018/03/05 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
2018/08/06 Javascript
React Native中Mobx的使用方法详解
2018/12/04 Javascript
微信小程序开发的基本流程步骤
2019/01/31 Javascript
vue实现多条件和模糊搜索功能
2019/05/28 Javascript
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
Vue使用axios引起的后台session不同操作
2020/08/14 Javascript
python实现简单的计时器功能函数
2015/03/14 Python
利用Python为iOS10生成图标和截屏
2016/09/24 Python
Python lambda函数基本用法实例分析
2018/03/16 Python
python pandas 组内排序、单组排序、标号的实例
2018/04/12 Python
用vue.js组件模拟v-model指令实例方法
2019/07/05 Python
PYTHON如何读取和写入EXCEL里面的数据
2019/10/28 Python
python uuid生成唯一id或str的最简单案例
2021/01/13 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
英国当代时尚和街头服饰店:18montrose
2018/12/15 全球购物
西班牙购买行李箱和背包网站:Maletas Greenwich
2019/10/08 全球购物
工作会议欢迎词
2014/01/16 职场文书
教师党员群众路线教育实践活动心得体会
2014/11/04 职场文书
初任公务员培训心得体会
2016/01/08 职场文书
Golang日志包的使用
2022/04/20 Golang