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 无法清除监听的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
更新日志
2024年11月15日
2024年11月15日
- 黄乙玲1988-无稳定的爱心肝乱糟糟[日本东芝1M版][WAV+CUE]
- 群星《我们的歌第六季 第3期》[320K/MP3][70.68MB]
- 群星《我们的歌第六季 第3期》[FLAC/分轨][369.48MB]
- 群星《燃!沙排少女 影视原声带》[320K/MP3][175.61MB]
- 乱斗海盗瞎6胜卡组推荐一览 深暗领域乱斗海盗瞎卡组分享
- 炉石传说乱斗6胜卡组分享一览 深暗领域乱斗6胜卡组代码推荐
- 炉石传说乱斗本周卡组合集 乱斗模式卡组最新推荐
- 佟妍.2015-七窍玲珑心【万马旦】【WAV+CUE】
- 叶振棠陈晓慧.1986-龙的心·俘虏你(2006复黑限量版)【永恒】【WAV+CUE】
- 陈慧琳.1998-爱我不爱(国)【福茂】【WAV+CUE】
- 咪咕快游豪礼放送,百元京东卡、海量欢乐豆就在咪咕咪粉节!
- 双11百吋大屏焕新“热”,海信AI画质电视成最大赢家
- 海信电视E8N Ultra:真正的百吋,不止是大!
- 曾庆瑜1990-曾庆瑜历年精选[派森][WAV+CUE]
- 叶玉卿1999-深情之选[飞图][WAV+CUE]