An open API service indexing awesome lists of open source software.

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

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(以前忘记了- -)。