delegate.js - 一个轻量级的 JavaScript 事件委托库。
编写 delegate.js 的主要是为初学 JavaScript 的朋友了解 JavaScript 中的事件委托 实现机制而开发。当然,delegate.js 也可以应用到实际的产品开发中。
- 原生 JavaScript 编写,无任何依赖;
- 支持 UMD 规范,同时也提供 ES6 模块调用;
- 支持创建和绑定自定义事件,并且可以手动触发自定义事件;
- 采用 jQuery 链式调用语法,调用语法简洁方便;
- 文件体积小(Gzip:3KB),加载速度快;
IE / Edge |
Firefox |
Chrome |
Safari |
Opera |
---|---|---|---|---|
IE11, Edge | last 10 versions | last 10 versions | last 10 versions | last 10 versions |
delegate.js 支持 UMD 规范和 ES6 的模块调用方式,可以在 Node.js 环境中使用 npm 安装,也可以在浏览器中使用 script 标签引入到页面。
# install from npmjs.com
npm i -S @yaohaixiao/delegate.js
# install from github.com
npm i -S @yaohaixiao/delegate.js --registry=https://npm.pkg.github.com
在浏览器中调用 delegate.js,可以选择调用 jsdelivr 提供的 CDN 服务中的文件,也可以使用本地的 delegate.js 文件。
<script src="https://cdn.jsdelivr.net/gh/yaohaixiao/delegate.js/delegate.min.js"></script>
<script src="https://cdn.jsdelivr.net/gh/yaohaixiao/delegate.js/delegate.core.min.js"></script>
<script src="/path/to/delegate.min.js"></script>
<script src="/path/to/delegate.core.min.js"></script>
const delegate = require('@yaohaixiao/delegate.js')
// 调用 delegate 实例对象
import delegate from '@yaohaixiao/delegate.js/delegate'
// 或者调用 core 版本
// core 版本仅提供以下几个方法:
// on()
// once()
// off()
// click()
// mouseenter()
// mouseleave()
// change()
// createEvent()
// trigger()
// purge()
// destroy()
import delegate from '@yaohaixiao/delegate.js/delegate.core'
// 调用 Emitter 构造函数
import Emitter from '@yaohaixiao/delegate.js/emitter'
// 或者调用 Emitter Core 版本
import Emitter from '@yaohaixiao/delegate.js/emitter.core'
// 调用单个(on/once/off)方法
import on from '@yaohaixiao/delegate.js/on'
import once from '@yaohaixiao/delegate.js/once'
import off from '@yaohaixiao/delegate.js/off'
delegate.js 中封装了:on()、once()、off() 等事件侦听相关的常用方法。delegate.js 的 API 借鉴了 jQuery 的链式调用模式,掉起来非常方便。
Type: HTMLElement|String
Default: ``
必须,要添加事件代理的 DOM 元素或者 DOM 元素的选择器。
// 使用 DOM 节点选择器
delegate('#list')
// 使用 DOM 节点
const $list = document.getElementById('list')
delegate($list)
Type: HTMLElement
Default: ``
添加事件代理的 DOM 元素。
// 使用 DOM 节点选择器
const $emitter = delegate('#list')
$emitter.$el // => 获取到 list 列表 DOM 元素
delegate.js 体积虽然小(Gzip 压缩后仅 3KB),却提供了十分丰富的事件代理相关的操作方法:
at() 方法用来绑定事件处理器。
Type: String
Default: ``
(必须)type 用以设置触发的事件类型。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
const handler = function(evt, data) {
console.log('data', data)
// => { user: 'Robert' }
}
// 使用 DOM 节点选择器
const $emitter = delegate('#list')
$emitter.at('click', handler, { user: 'Robert' })
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向:
- 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象;
- 如未指定 context,则事件处理器回调函数的 this 上下文指向为 Emitter 对象;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
const handler = function(evt) {
const $li = evt.delegateTarget
console.log(`你点击的 li 节点的 id 为 ${$li.id}`)
}
const $emitter = delegate('#list')
// once 属性为 true,点击事件处理器仅触发一次
$emitter.at('click', handler, true)
// 默认每次点击都会触发执行点击事件处理器
$emitter.at('click', handler)
Type: Emitter
返回 Emitter 对象(实例)。
on() 方法用来绑定事件代理处理器。
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
const handler = function(evt) {
const $li = evt.delegateTarget
console.log(`你点击的 li 节点的 id 为 ${$li.id}`)
}
const $emitter = delegate('.list')
// 类选择器
$emitter.on('.item', 'click', handler)
// 标签选择择器
$emitter.on('li', 'click', handler)
// 子类选择器
$emitter.on('li > span', 'click', handler)
Type: String
Default: ``
(必须)type 用以设置触发的事件类型。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
const handler = function(evt, data) {
console.log('data', data)
// => { user: 'Robert' }
}
// 使用 DOM 节点选择器
const $emitter = delegate('#list')
$emitter.on('li', 'click', handler, { user: 'Robert' })
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向:
- 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象;
- 如未指定 context,则事件处理器回调函数的 this 上下文指向为 Emitter 对象;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
const handler = function(evt) {
const $li = evt.delegateTarget
console.log(`你点击的 li 节点的 id 为 ${$li.id}`)
}
const $emitter = delegate('#list')
// once 属性为 true,点击事件处理器仅触发一次
$emitter.on('.item', 'click', handler, true)
// 默认每次点击都会触发执行点击事件处理器
$emitter.on('.item', 'click', handler)
Type: Emitter
返回 Emitter 对象(实例)。
once() 方法用来绑定事件代理处理器,仅触发一次。
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
const handler = function(evt) {
const $li = evt.delegateTarget
console.log(`你点击的 li 节点的 id 为 ${$li.id}`)
}
const $emitter = delegate('.list')
// 类选择器
$emitter.once('.item', 'click', handler)
// 标签选择择器
$emitter.once('li', 'click', handler)
// 子类选择器
$emitter.once('li > span', 'click', handler)
Type: String
Default: ``
(必须)type 用以设置触发的事件类型。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
const handler = function(evt, data) {
console.log('data', data)
// => { user: 'Robert' }
}
// 使用 DOM 节点选择器
const $emitter = delegate('#list')
$emitter.once('li', 'click', handler, { user: 'Robert' })
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Emitter
返回 Emitter 对象(实例)。
off() 方法用来接触绑定的事件代理处理器。
Type: String
Default: ``
(可选)type 指定需要接触绑定的事件类型,不指定则解绑 $el 上绑定的所有事件处理器。
const handler = function(evt) {
const $li = evt.delegateTarget
console.log(`你点击的 li 节点的 id 为 ${$li.id}`)
}
const callback = function(evt) {
const $li = evt.delegateTarget
console.log(`你双击的 li 节点的 id 为 ${$li.id}`)
}
const fn = function(evt) {
const $li = evt.delegateTarget
console.log(`你鼠标划过的 li 节点的 id 为 ${$li.id}`)
}
const $emitter = delegate('#list')
// 绑定了
$emitter.on('.item', 'click', handler)
$emitter.on('.item', 'click', fn)
$emitter.on('.item', 'dbclick', callback)
$emitter.on('.item', 'mouserenter', fn)
// 解除 click 事件绑定的 handler 事件处理器
$emitter.off($list, 'click', callback)
// 解除 #list 绑定的所有事件处理器
$emitter.off($list)
Type: Function
Default: ``
(可选)fn 指定需要接触绑定的事件处理器回调函数,如果不指定则接触 $el 绑定的所有指定 type 的事件处理器。
const handler = function(evt) {
const $li = evt.delegateTarget
console.log(`你点击的 li 节点的 id 为 ${$li.id}`)
}
const callback = function(evt) {
const $li = evt.delegateTarget
console.log(`你双击的 li 节点的 id 为 ${$li.id}`)
}
const fn = function(evt) {
const $li = evt.delegateTarget
console.log(`你鼠标划过的 li 节点的 id 为 ${$li.id}`)
}
const $emitter = delegate('#list')
// 绑定了
$emitter.on('.item', 'click', handler)
$emitter.on('.item', 'click', fn)
$emitter.on('.item', 'click', callback)
// 解除 click 事件绑定的 handler 事件处理器
$emitter.off($list, 'click', callback)
// 解除所有 click 事件处理器
$emitter.off($list, 'click')
绑定 click 代理事件,其调用方法和 on() 类似。
1.4.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 click 代理事件
$emitter.click('.item', handler)
绑定 dbclick 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 click 代理事件
$emitter.dbclick('.item', handler)
绑定 mouseenter 代理事件。
1.4.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.relatedTarget
console.log(`当前事件的 relatedTarget 是:${$target}`)
}
const $emitter = delegate('#list')
// 类选择器
$emitter.mouseenter('.item', handler)
绑定 mouseleave 代理事件。
1.4.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.relatedTarget
console.log(`当前事件的 relatedTarget 是:${$target}`)
}
const $emitter = delegate('#list')
// 类选择器
$emitter.mouseleave('.item', handler)
绑定 mousedown 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 mousedown 代理事件
$emitter.mousedown('.item', handler)
绑定 mouseup 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 mouseup 代理事件
$emitter.mouseup('.item', handler)
绑定 mouseover 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 mouseover 代理事件
$emitter.mouseover('.item', handler)
绑定 mousemove 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 mousemove 代理事件
$emitter.mousemove('.item', handler)
绑定 mouseout 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 mouseout 代理事件
$emitter.mouseout('.item', handler)
绑定 drag 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 drag 代理事件
$emitter.drag('.item', handler)
绑定 dragend 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 dragend 代理事件
$emitter.dragend('.item', handler)
绑定 dragenter 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 dragenter 代理事件
$emitter.dragenter('.item', handler)
绑定 dragleave 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 dragleave 代理事件
$emitter.dragleave('.item', handler)
绑定 dragover 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 dragover 代理事件
$emitter.dragover('.item', handler)
绑定 dragstart 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 dragstart 代理事件
$emitter.dragstart('.item', handler)
绑定 drop 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 drop 代理事件
$emitter.drop('.item', handler)
绑定 wheel 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 wheel 代理事件
$emitter.wheel('.item', handler)
绑定 contextmenu 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 contextmenu 代理事件
$emitter.contextmenu('.item', handler)
focusin() 方法用来绑定 focusin(IE) 或者 focus(其它) 代理事件处理器,调用方法和 on() 一致。并且会根据浏览器自动添加事件类型。具体调用方法请参考 on() 方法。
1.4.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $input = evt.delegateTarget
console.log(`输入框当前值为:${$input.value}`)
}
const $emitter = delegate('.options-input')
// 类选择器
$emitter.focusin('.options-input__inner', handler)
focusout() 方法用来绑定 focusout(IE) 或者 blur(其它) 代理事件处理器,调用方法和 on() 一致。并且会根据浏览器自动添加事件类型。具体调用方法请参考 on() 方法。
1.4.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $input = evt.delegateTarget
console.log(`输入框当前值为:${$input.value}`)
}
const $emitter = delegate('.options-input')
// 类选择器
$emitter.focusout('.options-input__inner', handler)
绑定 change 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#form')
// 绑定 change 代理事件
$emitter.change('.input', handler)
绑定 input 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#form')
// 绑定 input 代理事件
$emitter.input('.input', handler)
绑定 compositionstart 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#form')
// 绑定 compositionstart 代理事件
$emitter.compositionstart('.input', handler)
绑定 compositionupdate 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#form')
// 绑定 contextmenu 代理事件
$emitter.compositionupdate('.input', handler)
绑定 compositionend 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#form')
// 绑定 compositionend 代理事件
$emitter.compositionend('.input', handler)
绑定 paste 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#form')
// 绑定 paste 代理事件
$emitter.paste('.input', handler)
绑定 copy 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#list')
// 绑定 copy 代理事件
$emitter.copy('.item', handler)
绑定 cut 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#form')
// 绑定 cut 代理事件
$emitter.cut('.textarea', handler)
绑定 keydown 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#form')
// 绑定 keydown 代理事件
$emitter.keydown('.input', handler)
绑定 keyup 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#form')
// 绑定 keyup 代理事件
$emitter.keyup('.input', handler)
绑定 error 代理事件。
1.7.0
Type: String
Default: ``
(必须)通过 selector 选择器判定是否触发指定事件类型的事件处理器。
Type: Function
Default: ``
(必须)fn 为事件处理器回调函数。
Type: Object
Default: ``
(可选)给事件处理器回调函数传递的数据。
Type: Object|Boolean
Default: ``
(可选)事件处理器回调函数的 this 上下文指向,具体介绍请参考 on() 方法的 context 参数说明;
Type: Boolean
Default: false
(可选)once 指定事件处理器回调函数是否仅执行一次。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $target = evt.delegateTarget
console.log(`触发事件的 delegateTarget DOM 元素的 id 是:${$target.id}`)
}
const $emitter = delegate('#albums')
// 绑定 error 代理事件
$emitter.error('.image', handler)
创建自定义事件(CustomerEvent)。
1.8.0
Type: String
Default: ``
(必须)事件类型(名称)。
Type: Object
Default: null
(可选)传递给自定义事件的数据,默认为 null。
Type: Boolean
Default: true
(可选)是否支持冒泡,默认为 true。
Type: Boolean
Default: true
(可选)是否可以取消,默认为 true。
Type: CustomerEvent
CustomerEvent 实例。
<div id="nav" class="nav">
<a id="service" class="anchor" href="https://www.yaohaixiao.com/serivce">Service</a>
<a id="help" class="anchor" href="https://www.yaohaixiao.com/help">Help</a>
</div>
const $nav = document.querySelector('#nav')
const $service = document.querySelector('#serivce')
const $emitter = delegate($nav)
const logEvent = $emitter.createEvent('log', {
name: 'Yao',
hi() {
console.log('hi!!!')
}
})
const logHandler = function(evt) {
console.log('detail', evt.detail)
console.log('type', evt.type)
}
// 或者
$service.dispatchEvent(logEvent)
trigger() 方法用作手动触(自定义)事件。 trigger() 方法也可以用来手动触发内置的事件,例如 click, mouseenter 等事件,不过通常使用 trigger() 来手动触发用户自定义事件。
另外,选择器 selector 的匹配使用 document.querySelector() 方法,因此仅事件触发一次。
1.6.0
Type: String
Default: ``
(必须)事件类型。
Type: String
Default: ``
(可选)通过 selector 选择器判定是否触发指定事件类型的事件处理器。没有选择器,则直接触发 el 元素上的自定义事件
Type: Emitter
返回 Emitter 对象(实例)。
<ul id="list" class="list">
<li class="item">
<a href="/home" class="nav">Home</a>
</li>
<li class="item">
<a href="/support" class="nav">Support</a>
</li>
<li class="item">
<a href="/faqs" class="nav">FAQs</a>
</li>
</ul>
const $list = document.querySelector('#list')
const $emitter = delegate($list)
const itemHandler = function(evt) {
// 其它逻辑
console.log(evt.type + ':' + evt.delegateTarget)
}
const navHandler = function(evt) {
// 其它逻辑
$emitter.stopEvent(evt)
console.log(evt.type + ':' + evt.delegateTarget)
}
// 绑定 alert 自定义事件
$emitter.on('.item', 'alert', itemHandler)
$emitter.on('.nav', 'log', navHandler)
// 直接给 $list 绑定 alert 事件
$emitter.at('alert', itemHandler)
// 触发 $list 下匹配 '.item' 元素手动触发 alert 自定义事件
$emitter.trigger('alert', '.item')
// 可以使用伪类选择器,更精确的匹配元素
$emitter.trigger('alert', '.item:last-child')
// 触发 $list 下匹配 '.remove' 元素手动触发 alert 自定义事件
$emitter.trigger('alert', '.nav')
$emitter.trigger('alert', '.nav:nth-child(1)')
// 触发 $list 绑定的 alert 事件
$emitter.trigger('alert')
清除 DOM 元素($el)全部或者指定 type 类型的事件处理器。
Type: String
Default: ``
(必须)设置 type 时清除特定的事件类型(type)的事件处理器。
Type: Boolean
Default: false
(可选)是否递归清理 DOM 元素下所有子节点绑定的事件处理器,默认值:false - 仅清理当前 DOM 元素的事件处理器,true - 同事递归清理 DOM 元素下所有子节点绑定的事件处理器。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $li = evt.delegateTarget
const $textarea = document.querySelector('#log-textarea')
$textarea.value += `你点击的 li 节点的 id 为 ${$li.id}\r`
}
const $emitter = delegate('#list')
// 绑定事件
$emitter.on('li', 'click', handler)
// 获取已绑定的所有类型的事件处理器
$emitter.getListeners()
// 获取所有 click 事件处理器
$emitter.getListeners('click')
// => [{
// options,
// selector,
// type,
// fn,
// data,
// context,
// capture
// }]
// 清除绑定的所有 click 事件处理器
$emitter.purge('click')
// 清除 $options 元素所有 click 事件处理器
// 同时也清除其子节点绑定的所有类型事件处理器
$emitter.purge('click', true)
解除 DOM 元素($el)全部包括子元素的所有事件处理器。
Type: Emitter
返回 Emitter 对象(实例)。
const handler = function(evt) {
const $li = evt.delegateTarget
const $textarea = document.querySelector('#log-textarea')
$textarea.value += `你点击的 li 节点的 id 为 ${$li.id}\r`
}
const $emitter = delegate('#list')
// 解除所有绑定事件
$emitter.destroy()
// => 点击 li 元素将不会执行 handler 事件处理器
阻止触发绑定事件 DOM 元素的默认行为。
Type: Event
Default: ``
(必须)事件对象。
Type: Emitter
返回 Emitter 对象(实例)。
<ul id="list" class="list">
<li class="item">
<a href="/home" class="nav">Home</a>
</li>
<li class="item">
<a href="/support" class="nav">Support</a>
</li>
<li class="item">
<a href="/faqs" class="nav">FAQs</a>
</li>
</ul>
const handler = function(evt) {
const $link = evt.delegateTarget
const $textarea = document.querySelector('#log-textarea')
// preventDefault() 方法会阻止点击链接后默认跳转页面的行为发生
$emitter.preventDefault(evt)
$textarea.value += `你点击了导航菜单 ${$link.innerHTML},但它不会跳转到${$link.href}页面\r`
}
const $emitter = delegate('#list')
// 点击导航菜单,不会跳转页面
$emitter.on('a.nav', 'click', handler)
// => 点击 li 元素将不会执行 handler 事件处理器
终止事件在传播过程的捕获或冒泡的事件流。
Type: Event
Default: ``
(必须)事件对象。
Type: Emitter
返回 Emitter 对象(实例)。
<ul id="list" class="list">
<li class="item" id="item-home">
<span>Home</span>
<span class="item-remove" data-id="home">删除</a>
</li>
<li class="item" id="item-support">
<span>Support</span>
<span class="item-remove" data-id="support">删除</a>
</li>
<li class="item" id="item-faqs">
<span>FAQs</span>
<span class="item-remove" data-id="faqs">删除</a>
</li>
</ul>
const $emitter = delegate('#list')
const removeItem = function (evt) {
const $removeButton = evt.delegateTarget
const id = parseInt($removeButton.getAttribute('data-id'), 10)
const $textarea = document.querySelector('#log-textarea')
// 阻止事件冒泡,不触发执行 showLog() 回调函数
$emitter.stopPropagation(evt)
// ...省略删除的逻辑
$textarea.value += `你删除的 li 节点的 id 为 item-${id}\r`
}
const showLog = function (evt) {
const $li = evt.delegateTarget
const $textarea = document.querySelector('#log-textarea')
$textarea.value += `你点击的 li 节点的 id 为 ${$li.id}\r`
}
// 点击删除,只会删除点击行,但不会触发事件冒泡,触发点击 .item 的事件处理函数执行
$emitter.on('.item-remove', 'click', removeItem)
$emitter.on('.item', 'click', showLog)
停止事件(阻止默认行为和阻止事件的捕获或冒泡)。
Type: Event
Default: ``
(必须)事件对象。
Type: Emitter
返回 Emitter 对象(实例)。
<ul id="list" class="list">
<li class="item" id="item-home">
<span>Home</span>
<a href="/sitemap#home" class="item-remove" data-id="home">删除</a>
</li>
<li class="item" id="item-support">
<span>Support</span>
<a href="/sitemap#support" class="item-remove" data-id="support">删除</a>
</li>
<li class="item" id="item-faqs">
<span>FAQs</span>
<a href="/sitemap#support" class="item-remove" data-id="faqs">删除</a>
</li>
</ul>
const $emitter = delegate('#list')
const removeItem = function (evt) {
const $removeButton = evt.delegateTarget
const id = $removeButton.getAttribute('data-id')
const $textarea = document.querySelector('#log-textarea')
// 阻止事件冒泡,不触发执行 showLog() 回调函数
// 同时阻止点击链接跳转到 /sitemap 页面
$emitter.stopEvent(evt)
// ...省略删除的逻辑
$textarea.value += `你删除的 li 节点的 id 为 item-${id}\r`
}
const showLog = function (evt) {
const $li = evt.delegateTarget
const $textarea = document.querySelector('#log-textarea')
$textarea.value += `你点击的 li 节点的 id 为 ${$li.id}\r`
}
// 点击删除,只会删除行,不会跳转页面,也不会触发事件冒泡,触发执行 showLog() 回调函数
$emitter.on('.item-remove', 'click', removeItem)
$emitter.on('.item', 'click', showLog)
阻止监听同一事件的其他事件监听器被调用,并且阻止默认行为和事件冒泡。
1.8.0
Type: Event
Default: ``
(必须)事件对象。
Type: Emitter
返回 Emitter 对象(实例)。
<ul id="list" class="list">
<li class="item" id="item-home">
<span>Home</span>
<a href="/sitemap#home" class="item-remove" data-id="home">删除</a>
</li>
<li class="item" id="item-support">
<span>Support</span>
<a href="/sitemap#support" class="item-remove" data-id="support">删除</a>
</li>
<li class="item" id="item-faqs">
<span>FAQs</span>
<a href="/sitemap#support" class="item-remove" data-id="faqs">删除</a>
</li>
</ul>
let logged = false
let styled = false
const $list = document.querySelector('#list')
const $support = document.querySelector('#item-support')
const $link = document.querySelector('a[data-id="support"]')
const $emitter = delegate($support)
const logHandler = function(evt) {
logged = true
console.log(evt.target)
}
const styleHandler = function(evt) {
styled = true
$list.classList.add('checked')
}
const serviceHandler = function(evt) {
alert(evt.target)
$emitter.stopImmediate(evt)
}
const removeHandler = function(evt) {
const $target = evt.target
$target.parentNode.removeChild($target)
}
$list.addEventListener('click', logHandler)
$list.addEventListener('click', styleHandler)
$emitter.on('.remove', 'click', serviceHandler)
$emitter.on('.remove', 'click', removeHandler)
// 不会触发 removeHandler,不会删除一行
// 不会冒泡触发父节点 $list 上绑定的 click 事件
trigger('click', '.remove')
// -> logged = false
// -> styled = false
// document.querySelectorAll('.item').length = 3
获取 DOM 元素($el)全部或者指定 type 类型的事件处理器相关的(数组)数据。
Type: String
Default: ``
(可选)设置 type 时获取特定的事件类型(type),默认获取所有类型的事件处理器。
Type: Array
Default: []
返回已绑定的事件类型的数组(去除名称重复的事件)。
const handler = function(evt) {
const $li = evt.delegateTarget
const $textarea = document.querySelector('#log-textarea')
$textarea.value += `你点击的 li 节点的 id 为 ${$li.id}\r`
}
const $emitter = delegate('#list')
// 绑定事件
$emitter.click('li', handler)
// 获取已绑定的所有类型的事件处理器
$emitter.getListeners('click')
// => [
// {
// options,
// selector,
// type,
// fn,
// data,
// context,
// capture
// }
// ]
返回已绑定的事件类型的数组(去除名称重复的事件)。
1.5.0
Type: Array
Default: ``
返回已绑定事件类型的数组。
const handler = function(evt) {
const $li = evt.delegateTarget
const $textarea = document.querySelector('#log-textarea')
$textarea.value += `你点击的 li 节点的 id 为 ${$li.id}\r`
}
const $emitter = delegate('#list')
// 绑定事件
$emitter.on('item', 'click', handler)
$emitter.click('.remove', handler)
$emitter.mouseenter('.item', handler)
const types = $emitter.getTypes()
console.log(type)
// 会去除重复的 click 事件
// => ['click', 'mouseenter']
判断是否已经(指定类型的)绑定事件。
1.4.0
Type: String
Default: ``
(可选)事件名称:
- 指定 type,则判断是否绑定 type 类型事件;
- 未指定 type,则判断是否绑定任意类型的事件;
Type: Boolean
Default: ``
返回是否绑定(type类型的)事件处理器。
const handler = function(evt) {
const $li = evt.delegateTarget
const $textarea = document.querySelector('#log-textarea')
$textarea.value += `你点击的 li 节点的 id 为 ${$li.id}\r`
}
const $emitter = delegate('#list')
// 绑定事件
$emitter.on('li', 'click', handler)
$emitter.hasEvent()
// -> true
$emitter.hasEvent('focus')
// => false
获取事件触发时的 pageX 值。
Type: Event
Default: ``
(必须)事件对象。
Type: Number
返回事件触发时的 pageX 值。
const $emitter = delegate('#list')
const showLog = function (evt) {
const pageX = $emitter.getPageX(evt)
console.log(`pageX 为:${pageX}`)
}
$emitter.on('.item', 'click', showLog)
获取事件触发时的 pageY 值。
Type: Event
Default: ``
(必须)事件对象。
Type: Number
返回事件触发时的 pageY 值。
const $emitter = delegate('#list')
const showLog = function (evt) {
const pageY = $emitter.getPageY(evt)
console.log(`pageY 为:${pageY}`)
}
$emitter.on('.item', 'click', showLog)
获取事件触发时的 pageX 和 pageY 数组数据。
Type: Event
Default: ``
(必须)事件对象。
Type: Array
返回事件触发时的数组数据:[pageX, pageY]。
const $emitter = delegate('#list')
const showLog = function (evt) {
const pageXY = $emitter.getPageXY(evt)
console.log(`pageX 为:${pageXY[0]}`)
console.log(`pageY 为:${pageXY[1]}`)
}
$emitter.on('.item', 'click', showLog)
返回触发事件的 charCode。
Type: Event
Default: ``
(必须)事件对象。
Type: Number
返回事件的 charCode。
<form id="form" name="form" class="form">
<div class="field">
<label for="user">用户名:</label>
<input id="user" name="user" type="text" class="input" />
</div>
<div class="field">
<label for="password">密 码:</label>
<input id="password" name="password" type="password" class="input" />
</div>
</form>
const $emitter = delegate('#form')
const showLog = function (evt) {
const charCode = $emitter.getCharCode(evt)
console.log(`当前按键的 charCode 为:${charCode}`)
}
$emitter.on('.input', 'keydown', showLog)
返回触发事件的 relatedTarget DOM 元素。
说明:MouseEvent.relatedTarget 只读属性是鼠标事件的次要目标(如果有)。
相关的鼠标事件有:
- mouseenter
- mouseleave
- mouseover
- mouseout
- dragenter
- dragleave
1.1.0
Type: Event
Default: ``
(必须)事件对象。
Type: HTMLElement
Event 对象的 relatedTarget DOM 元素。
<ul id="list" class="list">
<li class="item" id="item-home">
<span>Home</span>
<a href="/sitemap#home" class="remove" data-id="home">删除</a>
</li>
<li class="item" id="item-support">
<span>Support</span>
<a href="/sitemap#support" class="remove" data-id="support">删除</a>
</li>
<li class="item" id="item-faqs">
<span>FAQs</span>
<a href="/sitemap#support" class="remove" data-id="faqs">删除</a>
</li>
</ul>
const $emitter = delegate('#list')
const showLog = function (evt) {
const relatedTarget = $emitter.getRelatedTarget(evt)
console.log(`当前触发事件的 relatedTarget 为:${relatedTarget}`)
}
$emitter.on('.remove', 'mouseenter', showLog)
返回触发事件的 target DOM 元素。
1.1.0
Type: Event
Default: ``
(必须)事件对象。
Type: HTMLElement
Event 对象的 target DOM 元素。
<ul id="list" class="list">
<li class="item" id="item-home">
<span>Home</span>
<a href="/sitemap#home" class="remove" data-id="home">删除</a>
</li>
<li class="item" id="item-support">
<span>Support</span>
<a href="/sitemap#support" class="remove" data-id="support">删除</a>
</li>
<li class="item" id="item-faqs">
<span>FAQs</span>
<a href="/sitemap#support" class="remove" data-id="faqs">删除</a>
</li>
</ul>
const $emitter = delegate('#list')
const showLog = function (evt) {
const target = $emitter.getTarget(evt)
console.log(`当前触发事件的 target 为:${target}`)
}
$emitter.on('.remove', 'click', showLog)
https://yaohaixiao.github.io/delegate.js/#example
Licensed under MIT License.