解决removeEventListener 无法清除监听的问题


Posted in Javascript onOctober 30, 2020

1. 原因

许多入前端不久的人都会遇到 removeEventListener 无法清除监听的情况,这是由于

要移除事件句柄,addEventListener() 的执行函数必须使用外部函数,如上实例所示 (myFunction)。

匿名函数,类似 “document.removeEventListener(“event”, function(){ myScript });” 该事件是无法移除的。

而在很多情况下我们需要句柄回调的传参,又需要其他传参时免不了使用句柄,这个时候我们需要写一个方法去替代这个回调,以下是解决方式,写了一个addListener 函数在 addEventListener 之后返回它的销毁方法

2.解决方式

function isFn(value) {
 const type = Object.prototype.toString.call(value);
 return type === '[object Function]';
}
function isNode(value) {
 return value !== undefined && value instanceof HTMLElement && value.nodeType === 1;
}

function listenNode(node, type, callback) {
 node.addEventListener(type, callback);
 return {
  destroy() {
   node.removeEventListener(type, callback);
  },
 };
}

function addListener(target, type, callback) {
 if (!target && !type && !callback) {
  throw new Error('缺少参数');
 }
 if (!isFn(callback)) {
  throw new TypeError('Third argument must be a Function');
 }
 if (isNode(target)) {
  return listenNode(target, type, callback);
 }
 throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');
}

function listenNodeList(nodeList, type, callback) {
 Array.prototype.forEach.call(nodeList, node => {
  node.addEventListener(type, callback);
 });

 return {
  destroy() {
   Array.prototype.forEach.call(nodeList, node => {
    node.removeEventListener(type, callback);
   });
  },
 };
}
module.exports = listener;

补充知识:vue 创建监听,和销毁监听(addEventListener, removeEventListener)

最近在做一个有关监听scroll的功能, 发现我添加监听之后一直不起作用:

mounted() {

window.addEventListener("scroll", this.setHeadPosition); //this.setHeadPosition方法名

后来发现要在后面添加一个true之后才行:

mounted() {
 window.addEventListener("scroll", this.setHeadPosition, true);
},

而在离开是的时候需要销毁监听: (在destroyed里面销毁), 否则监听会一直存在, 因为这是单页面应用, 页面并未关闭.

destroyed() {
 window.removeEventListener("scroll", this.setHeadPosition, true);
},

在销毁的时候一定也要加上true, 否则销毁不起作用.

以上这篇解决removeEventListener 无法清除监听的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
node在两个div之间移动,用ztree实现
Mar 06 Javascript
JavaScript 创建运动框架的实现代码
May 08 Javascript
JavaScript控制各种浏览器全屏模式的方法、属性和事件介绍
Apr 03 Javascript
node.js中的fs.openSync方法使用说明
Dec 17 Javascript
javascript实现动态导入js与css等静态资源文件的方法
Jul 25 Javascript
jQuery+Ajax实现无刷新操作
Jan 04 Javascript
javascript正则表达式之分组概念与用法实例
Jun 16 Javascript
js 获取范围内的随机数实例代码
Aug 02 Javascript
使用JSON作为函数的参数的优缺点
Oct 27 Javascript
微信小程序 slider的简单实例
Apr 19 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
Jun 16 Javascript
vue.js删除列表中的一行
Jun 30 Javascript
详解 javascript对象创建模式
Oct 30 #Javascript
ES6中的Javascript解构的实现
Oct 30 #Javascript
vue video和vue-video-player实现视频铺满教程
Oct 30 #Javascript
Echarts.js无法引入问题解决方案
Oct 30 #Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
Oct 30 #Javascript
vue 通过 Prop 向子组件传递数据的实现方法
Oct 30 #Javascript
微信小程序:报错(in promise) MiniProgramError
Oct 30 #Javascript
You might like
PHP学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
php格式化日期和时间格式化示例分享
2014/02/24 PHP
PHP+MYSQL会员系统的开发实例教程
2014/08/23 PHP
19个Android常用工具类汇总
2014/12/30 PHP
PHP rsa加密解密使用方法
2015/04/27 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
php判断目录存在的简单方法
2019/09/26 PHP
javascript引用对象的方法
2007/01/11 Javascript
改变文件域的样式实现思路同时兼容ie、firefox
2013/10/23 Javascript
ExtJs纵坐标值重复问题的解决方法
2014/02/27 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
javascript Deferred和递归次数限制实例
2014/10/21 Javascript
详解javascript高级定时器
2015/12/31 Javascript
Bootstrap教程JS插件弹出框学习笔记分享
2016/05/17 Javascript
Node.js中npm常用命令大全
2016/06/09 Javascript
微信小程序 获取微信OpenId详解及实例代码
2016/10/31 Javascript
React应用中使用Bootstrap的方法
2017/08/15 Javascript
JS实现图片居中悬浮效果
2017/12/25 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
2018/04/20 Javascript
java遇到微信小程序 "支付验证签名失败" 问题解决
2019/12/22 Javascript
React Ant Design树形表格的复杂增删改操作
2020/11/02 Javascript
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
python练习程序批量修改文件名
2014/01/16 Python
python3抓取中文网页的方法
2015/07/28 Python
详解Python3操作Mongodb简明易懂教程
2017/05/25 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
Python命名空间及作用域原理实例解析
2020/08/12 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
2020/12/07 Python
英语自我评价范文
2014/01/24 职场文书
上班离岗检讨书
2014/01/27 职场文书
乡镇庆八一活动方案
2014/02/02 职场文书
医药营销个人求职信
2014/04/12 职场文书
公务员考察材料范文
2014/12/23 职场文书
工程合作意向书范本
2015/05/09 职场文书
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电
Python网络编程之ZeroMQ知识总结
2021/04/25 Python