https://github.com/ecomfe/mini-event
A simple and dedicated library to provide event related components
https://github.com/ecomfe/mini-event
Last synced: 11 months ago
JSON representation
A simple and dedicated library to provide event related components
- Host: GitHub
- URL: https://github.com/ecomfe/mini-event
- Owner: ecomfe
- License: mit
- Created: 2013-10-19T14:19:10.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2016-06-30T03:34:47.000Z (about 10 years ago)
- Last Synced: 2025-07-22T05:16:57.377Z (12 months ago)
- Language: JavaScript
- Size: 123 KB
- Stars: 18
- Watchers: 17
- Forks: 7
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# mini-event
mini-event是一个简单的工具库,用于为任何系统提供事件相关的功能集,包括:
- 统一的`Event`事件对象。
- 事件的阻止默认行为(`preventDefault`)、停止冒泡(`stopPropagation`)、阻止后续处理(`stopImmediatePropagation`)功能。
- 事件的注册、反注册等功能。
## 文档
cd {mini-event}
npm i -g esdoc
esdoc -c esdoc.json
open doc/index.html
## 事件类型
在mini-event模型中,事件共分为2类。
### 命名事件
命名事件是最普通的事件,指一个带有名字的事件。当使用`.fire(eventName)`方法触发事件时,其中的`eventName`指定事件名称,对应名称符合的命名事件将被触发。
### 全局事件
全局事件是名称为`*`的事件,当任何事件被触发时,全局事件均会被触发。
开发者*不能*直接触发全局事件,使用`.fire('*')`触发全局事件将会得到异常结果。
全局事件**一定**在命名事件均触发完毕后触发。
全局事件触发时,事件对象的`type`属性值为事件的原始名称,而非`*`。
## 事件处理函数
不同类型的事件按以下顺序执行:
1. 依次触发所有命名事件处理函数。
2. 依次触发所有全局事件处理函数。
以上2步中,每一步对应的所有事件处理函数的执行有如下特征:
1. 触发顺序与事件被注册的顺序相同。
2. 同一个事件处理函数仅会被触发一次。
3. 在事件触发过程中,如果一个处理函数A移除了同一事件的另一个处理函数B,且B还未触发,则该处理函数不会在本次触发中被执行。
3. 如果调用事件对象的`.stopImmediatePropagation()`方法,则后续的处理函数均不会被执行。
当一个命名事件触发时,如果处理函数A在执行时移除了全局事件中的处理函数B,则由于B还未被执行,因此后续的全局事件中的处理函数B将不会再被执行。
如果一个事件在命名事件触发时被执行,则其在全局事件被触发时依旧可能被执行。命名事件与全局事件不存在去重的关系。
## 2.0版本变更
1. 使用ES6重写,需要完整的ES6运行环境或者对应的`polyfill`和编译转换,推荐使用[babel](http://babeljs.io/)进行编译。
2. 移除`Event.fromDOMEvent`方法。
3. 移除`EventTarget.enable`方法。
4. 移除对内联事件处理函数(`onxxx`方法)的支持。
## 2.1版本变更
1. 增加了`dist`目录放置使用UMD编译后的代码。
2. 内部事件池对象不再从`Object.prototype`继承。
3. 优化了单元测试、文档生成等npm命令。
## 2.2版本变更
1. `main`模块修改为ES6(以前忘记了- -)。