分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

自定义事件 js

发布时间:2023-09-06 01:41责任编辑:苏小强关键词:js
// 原理如下
// 创建 类型为HTMLEvents的事件var evt = document.createEvent("HTMLEvents");// 初始化 自定义eee 事件evt.initEvent("eee", false, false);
// 事件绑定
document.addEventListener("eee", function(e) { ?console.log(e)})

// document标签触发事件(直接运行代码触发)
document.dispatchEvent(evt);

这儿无法传参,再做一个封装。

 ???class EventEmitter { ???????constructor() { ???????????this.evt = document.createEvent("HTMLEvents") ???????} ???????on(type, fn) { ???????????this.evt.initEvent(type, false, false); ???????????document.addEventListener(type, () => { ???????????????fn(this.data) ???????????}, false) ???????} ???????emit(type, data) { ???????????this.data = data ???????????document.dispatchEvent(this.evt) ???????} ???} ???const evt = new EventEmitter() ???evt.on(‘abc‘, (data) => { ???????console.log(data) // {a: 1} ???}) ???evt.emit(‘abc‘, { a: 1 })

 还有问题, 没法绑定多个事件,这只要做一个map记录就行了

// 如下 ???class EventEmitter { ???????constructor() { ???????????// 统计事件map ???????????this.evts = new Map ???????} ???????// 注册事件 ???????on(type, fn) { ???????????let evt = document.createEvent("HTMLEvents") ???????????evt.initEvent(type, false, false) ???????????this.evts.set(type, { evt, fn }) ???????????document.addEventListener(type, () => fn(this.data), false) ???????} ???????// 触发事件 ???????emit(type, data) { ???????????if (!this.evts.has(type)) { ???????????????return false ???????????} ???????????this.data = data ???????????document.dispatchEvent(this.evts.get(type).evt) ???????} ???????// 删除事件 ???????remove(type) { ???????????document.removeEventListener(type, this.evts.get(type).fn, false) ???????????this.evts.delete(type) ???????} ???} ???const evt = new EventEmitter() ???evt.on(‘abc‘, (data) => { ???????console.log(‘abc‘, data) ???}) ???evt.on(‘aaa‘, (data) => { ???????console.log(‘aaa‘, data) ???}) ???evt.emit(‘aaa‘, { aaa: 1 }) // aaa {aaa: 1} ???evt.emit(‘abc‘, { a: 1 }) ?//abc {a: 1} ?????evt.emit(‘abc‘, { ddf: 1 }) //abc { ddf: 1 }
   evt.emit(‘ffg‘, { ddd: 1 }) ?// 无打印
  evt.remove(‘abc‘) ?// 删除
   evt.emit(‘abc‘, 111) // 无打印 

自定义事件 js

原文地址:https://www.cnblogs.com/gsgs/p/8421711.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved