事件对象
EventTarget 类
EventTarget 接口 - JavaScript 教程 - 网道 (wangdoc.com)
1. 原型方法
| 原型方法 | 描述 |
|---|---|
| addEventListener(type, listener[, useCapture]) | 在当前对象定义一个指定事件的监听函数。 (定义多次不同监听函数则按定义顺序执行,定义多次相同监听函数则只会保留执行一个) |
| removeEventListener(type, listener[, useCapture]) | 移除监听函数,参数中的值和对象必须和 addEventListener 方法完全一致。 |
| dispatchEvent(event) | 触发指定事件。只要有一个监听函数调用了 preventDefault 方法,则返回值为 false,否则为 true。 |
2. 定义事件监听函数
方式一
// 参数1:事件类型
// 参数2:监听函数
// 参数3:是否在捕获阶段触发(可选)
button.addEventListener('click', function(event) {
// this指向当前事件所在的对象
console.log(this.nodeName);
}, false);
// 参数1:事件类型
// 参数2:具有 handleEvent 方法的对象
// 参数3:配置对象(可选)
button.addEventListener('click', {
handleEvent: function (event) {
console.log('click');
}
},{
capture: false, // 是否在捕获阶段触发,默认false(即冒泡阶段触发)
once: false, // 是否只触发一次,默认false
passive: false, // 是否立即进行浏览器默认行为,默认false
signal: null, // AbortSignal 对象,为监听器设置了一个信号通道???
});
注意
当设置了 passive: true,事件触发时将立即进行浏览器默认行为,而不再等待监听函数执行完成。此时在监听函数中调用 event.preventDefault() 是无效的且会报错。
一般用于触摸事件的监听器,可以用来改善移动端设备的滚屏性能。
方式二
// 只在冒泡阶段触发,同一事件只能定义一个监听函数,不推荐
button.onclick = function (event) {
console.log('触发事件');
};
方式三
<!-- 只在冒泡阶段触发,同一事件只能定义一个监听函数,不推荐 -->
<!-- 在该局部作用域内包含了 event 变量作为事件对象 -->
<button onclick="handleEvent(event)">点击触发事件</button>
小结
推荐使用 addEventListener 的方式定义事件监听函数,优点如下:
- 能指定在冒泡阶段还是捕获阶段触发
- 同一事件可以添加多个监听函数
- 除了 DOM 节点,其他对象(比如 window、XMLHttpRequest 等)也有这个接口,它等于是整个 JavaScript 统一的监听函数接口
3. 事件传播
- 第一阶段(捕获阶段):从 window 对象传导到目标节点(上层传到底层)
- 第二阶段(目标阶段):在目标节点上触发
- 第三阶段(冒泡阶段):从目标节点传导回 window 对象(从底层传回上层)
假定文档结构如下:
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<div>
<button>按钮</button>
</div>
</body>
</html>
点击 button 按钮,具体事件传播如下:
window 捕获 → document 捕获→ html 捕获 → body 捕获 → div 捕获 → button 目标(捕获)
↓
window 冒泡 ← document 冒泡 ← html 冒泡 ← body 冒泡 ← div 冒泡 ← button 目标 (冒泡)
Event 类
Event 对象 - JavaScript 教程 - 网道 (wangdoc.com)
1. 事件类型
(1)表单事件(触发对象:相关表单对象)
select:input,textarea 里面选中文本change:input,textarea,select 的值发生变化(文本框或文本域的值变化后需要失去焦点才触发)invalid:表单成员的值不满足校验条件(如<input required>输入框是必填的,当为空时提交表单,在input 上触发)reset:form 表单重置submit:form 表单提交
(2)资源事件(触发对象:window,img,link,script 等资源相关对象)
unload:资源卸载时load:资源加载完成abort:资源加载中止error:资源加载错误
(3)状态事件(触发对象:document 对象)
readystatechange:readyState 属性变化DOMContentLoaded:解析完成,加载外部资源中
页面加载事件流程
解析HTML,执行JavaScript(document.readyState = loading)
加载外部资源(document.readyState = interactive)
① documet->readystatechange 事件触发
② documet->DOMContentLoaded 事件触发
加载完成(document.readyState = complete)
③ documet->readystatechange 事件触发
④ window->load 事件触发
⑤ window->pageshow 事件触发
(4)文档事件(触发对象:文档或文档元素)
scroll:文档或文档元素滚动fullscreenchange:文档元素全屏状态改变fullscreenerror:文档元素全屏状态改变失败
(5)window事件(触发对象:window 对象)
resize:窗口大小改变beforeprint:打印弹窗打开(window.print() 或 Ctrl + P)afterprint:打印弹窗关闭(取消或完成)
(6)媒体事件(触发对象:HTMLAudioElement 对象,HTMLVideoElement 对象)
loadstart:开始加载媒体文件时触发progress:媒体文件加载过程中触发,大概是每秒触发2到8次loadedmetadata:媒体文件元数据加载成功时触发loadeddata:当前播放位置加载成功后触发canplay:已经加载了足够的数据,可以开始播放时触发,后面可能还会请求数据。canplaythrough:已经加载了足够的数据,可以一直播放时触发,后面不需要继续请求数据suspend:已经缓冲了足够的数据,暂时停止下载时触发stalled:尝试加载数据,但是没有数据返回时触发play:调用 play() 方法时或自动播放启动时触发。如果已经加载了足够的数据,这个事件后面会紧跟playing事件,否则会触发waiting事件waiting:由于没有足够的缓存数据,无法播放或播放停止时触发。一旦缓冲数据足够开始播放,后面就会紧跟playing事件playing:媒体开始播放时触发timeupdate:currentTime属性变化时触发,每秒可能触发4到60次pause:调用 pause() 方法、播放暂停时触发seeking:脚本或者用户要求播放某个没有缓冲的位置,播放停止开始加载数据时触发。此时,seeking 属性返回 trueseeked:seeking 属性变回 false 时触发ended:媒体文件播放完毕时触发durationchange:duration属性变化时触发volumechange:音量变化时触发ratechange:播放速度或默认的播放速度变化时触发abort:停止加载媒体文件时触发,通常是用户主动要求停止下载error:网络或其他原因导致媒体文件无法加载时触发emptied:由于 error 或 abort 事件导致 networkState 属性变成无法获取数据时触发
(7)媒体流事件(触发对象:MediaStream 对象)
addtrack:添加轨道对象,调用 addTrack() 方法触发removeTrack:移除轨道对象,调用 removeTrack() 方法触发
(8)媒体设备事件(触发对象:navigator.mediaDevices 对象)
devicechange:媒体设备连接状态变化
2. 创建对象
- 用户行为创建
- 脚本创建
// 参数1:事件类型
// 参数2:配置对象(可选)
var event = new Event("事件类型", {
bubbles: false, // 是否冒泡,(注意:未显式指定为 true,是默认不会冒泡的)
cancelable: false, // 是否可用 preventDefault() 取消事件,即 preventDefault() 无效
});
3. 静态属性
| 静态属性 | 描述 |
|---|---|
| CAPTURING_PHASE | 1,表示捕获阶段 |
| AT_TARGET | 2,表示目标阶段 |
| BUBBLING_PHASE | 3,表示冒泡阶段 |
4. 原型属性
| 原型属性 | 描述 |
|---|---|
| type | 返回事件类型 |
| bubbles | 返回当前事件是否会冒泡 |
| cancelable | 返回事件是否可用 preventDefault() 取消 |
| defaultPrevented | 返回事件是否调用过 preventDefault() 方法 |
| cancelBubble | false 事件正常传播,true 阻止事件传播,等同于 stopPropagation() 方法 |
| target | 返回原始触发节点对象 |
| currentTarget | 返回当前事件通过的节点对象,即绑定事件监听函数的元素 |
| eventPhase | 返回事件目前的阶段:0 未发生,1 捕获阶段,2 目标阶段,3 冒泡阶段 |
| timeStamp | 返回一个毫秒时间戳,表示事件发生的时间,相对于网页加载成功开始计算的 |
| isTrusted | 返回事件是否由真实的用户行为产生 |
| detail | 返回详情信息,用户界面事件才具有。如鼠标点击事件,则表示鼠标点击次数;鼠标滚轮事件,则表示鼠标滚动的距离; |
5. 原型方法
| 原型方法 | 描述 |
|---|---|
| preventDefault() | 阻止浏览器默认行为,如点击链接跳转页面,点击空格键向下滚动等,不会影响事件传播。 (注意:需要事件对象的 cancelable 为 true 才生效) |
| stopPropagation() | 阻止事件继续传播(不包括在当前节点上的其他事件监听函数) |
| stopImmediatePropagation() | 阻止事件继续传播(包括在当前节点上的其他事件监听函数) |
| composedPath() | 返回事件冒泡经过的从最底层到最顶层的所有节点的 Array 数组 |
MouseEvent 类
鼠标事件 - JavaScript 教程 - 网道 (wangdoc.com)
1. 事件类型
(1)点击事件
click:点击鼠标左键dblclick:双击鼠标左键mousedown:按下鼠标任何键mouseup:释放按下的鼠标任何键
(2)移动事件
mousemove:鼠标移动mouseenter:鼠标进入父节点(从父节点进出子节点不触发)mouseleave:鼠标离开父节点(从父节点进出子节点不触发)mouseover:鼠标进入父节点(从父节点进出子节点也会触发)mouseout:鼠标离开父节点(从父节点进出子节点也会触发)
(触发对象:鼠标所在的位置的元素对象)
2. 创建对象
- 鼠标行为创建
- 脚本创建
// 参数1:事件类型
// 参数2:配置对象(可选)
var event = new MouseEvent("事件类型", {
..., // Event 参数
screenX: 0, // 鼠标位置相对于屏幕的水平坐标
screenY: 0, // 鼠标位置相对于屏幕的垂直坐标
clientX: 0, // 鼠标位置相对于浏览器窗口的水平坐标
clientY: 0, // 鼠标位置相对于浏览器窗口的垂直坐标
ctrlKey: false, // 是否同时按下了 Ctrl 键
shiftKey: false, // 是否同时按下了 Shift 键
altKey: false, // 是否同时按下了 Alt 键
metaKey: false, // 是否同时按下了 Meta 键(Windows 键)
button: 0, // 按下了哪一个鼠标按键
buttons: 0, // 按下了哪些鼠标按键
relatedTarget: null, // 事件的相关节点对象
});
3. 原型属性
| 原型属性 | 描述 |
|---|---|
| screenX | 返回鼠标位置相对于屏幕的水平坐标 |
| screenY | 返回鼠标位置相对于屏幕的垂直坐标 |
| clientX | 返回鼠标位置相对于浏览器窗口的水平坐标 |
| clientY | 返回鼠标位置相对于浏览器窗口的垂直坐标 |
| x | 同 clientX |
| y | 同 clientY |
| ctrlKey | 返回是否同时按下了 Ctrl 键 |
| shiftKey | 返回是否同时按下了 Shift 键 |
| altKey | 返回是否同时按下了 Alt 键 |
| metaKey | 返回是否同时按下了 Meta 键(Windows 键) |
| button | 返回按下了哪一个鼠标按键:0 鼠标左键,1 鼠标中键,2 鼠标右键 |
| buttons | 返回按下了哪些鼠标按键:001 鼠标左键,010 鼠标右键,100 鼠标中键(二进制) |
| movementX | 返回当前位置与上一个 mousemove 事件之间的水平距离 |
| movementY | 返回当前位置与上一个 mousemove 事件之间的垂直距离 |
| offsetX | 返回鼠标位置与目标节点左侧的 padding 边缘的水平距离 |
| offsetY | 返回鼠标位置与目标节点上侧的 padding 边缘的垂直距离 |
| pageX | 返回鼠标位置与文档左侧边缘的水平距离(包括文档不可见的部分) |
| pageY | 返回鼠标位置与文档上侧边缘的垂直距离 |
| relatedTarget | 返回事件的相关节点对象,如: mouseenter / mouseover / dragenter 事件中表示将离开的节点, mouseleave / mouseout / dragexit 事件中表示将进入的节点 |
4. 原型方法
| 原型方法 | 描述 |
|---|---|
| getModifierState(keyStr) | 根据功能键字符串,返回是否有按下该按键 |
WheelEvent 类
1. 事件类型
wheel:鼠标滚轮滚动
(触发对象:鼠标所在的位置的元素对象)
2. 创建对象
- 鼠标滚轮行为创建
- 脚本创建
// 参数1:事件类型
// 参数2:配置对象(可选)
var event = new WheelEvent("事件类型", {
..., // MouseEvent 参数
deltaX: 0, // 滚轮的水平滚动量
deltaY: 0, // 滚轮的垂直滚动量
deltaZ: 0, // 滚轮的Z轴滚动量
deltaMode: 0, // 滚动的单位
});
3. 原型属性
| 原型属性 | 描述 |
|---|---|
| deltaX | 返回滚轮的水平滚动量 |
| deltaY | 返回滚轮的垂直滚动量 |
| deltaZ | 返回滚轮的Z轴滚动量 |
| deltaMode | 返回滚动的单位:0 像素,1 行,2 页 |
PointerEvent 类
1. 事件类型
(1)点击事件
pointerdown:按下指针pointerup:释放按下的指针
(2)移动事件
pointermove:指针移动pointerenter:指针进入父节点(从父节点进出子节点不触发)pointerleave:指针离开父节点(从父节点进出子节点不触发)pointerover:指针进入父节点(从父节点进出子节点也会触发)pointerout:指针离开父节点(从父节点进出子节点也会触发)
(3)其他事件
contextmenu:出现上下文菜单(释放按下的鼠标右键)pointercancel:针将不再能够生成事件???gotpointercapture:指针捕获元素???lostpointercapture:指针释放元素???
(触发对象:指针所在的位置的元素对象)
2. 创建对象
- 指针行为创建
- 脚本创建
// 参数1:事件类型
// 参数2:配置对象(可选)
var event = new WheelEvent("事件类型", {
..., // MouseEvent 参数
pointerId: 0, // 指针的唯一标识符
width: 0, // 指针的接触几何形状的宽度
height : 0, // 指针的接触几何形状的高度
pressure: 0, // 归一化压力,取值 0 ~ 1
tangentialPressure: 0, // 标准化切向压力,取值 -1 ~ 1
tiltX: 0, // 指针轴和 Y 轴的平面角度,取值 -90 ~ 90(单位deg)
tiltY: 0, // 指针轴和 X 轴的平面角度,取值 -90 ~ 90(单位deg)
twist: 0, // 指针围绕其主轴的顺时针旋转,取值 0 ~ 359(单位deg)
pointerType: 0, // 指针的设备类型
isPrimary: 0, // 是否为此指针类型的主指针
});
3. 原型属性
| 原型属性 | 描述 |
|---|---|
| pointerId | 返回指针的唯一标识符 |
| width | 返回指针的接触几何形状的宽度 |
| height | 返回指针的接触几何形状的高度 |
| pressure | 返回归一化压力,取值 0 ~ 1 |
| tangentialPressure | 返回标准化切向压力,取值 -1 ~ 1 |
| tiltX | 返回指针轴和 Y 轴的平面角度,取值 -90 ~ 90(单位deg) |
| tiltY | 返回指针轴和 X 轴的平面角度,取值 -90 ~ 90(单位deg) |
| twist | 返回指针围绕其主轴的顺时针旋转,取值 0 ~ 359(单位deg) |
| pointerType | 返回指针的设备类型 |
| isPrimary | 返回是否为此指针类型的主指针 |
4. 原型方法
| 原型属性 | 描述 |
|---|---|
| getCoalescedEvents() | 返回已合并到调度的 pointermove 事件中的所有 PointerEvent 对象 |
KeyboardEvent 类
键盘事件 - JavaScript 教程 - 网道 (wangdoc.com)
1. 事件类型
keypress:按下有值的键盘(如 Ctrl、Alt、Shift、Meta 等为无值键盘)keydown:按下键盘keyup:松开键盘
(触发对象:焦点所在的元素对象)
2. 创建对象
- 键盘行为创建
- 脚本创建
// 参数1:事件类型
// 参数2:配置对象(可选)
var event = new KeyboardEvent("事件类型", {
..., // Event 参数
key: "", // 键名
code: "", // 键码
location: 0, // 键在键盘所处的区域
ctrlKey: false, // 是否按下了 Ctrl 键
shiftKey: false, // 是否按下了 Shift 键
altKey: false, // 是否按下了 Alt 键
metaKey: false, // 是否按下了 Meta 键(Windows 键)
repeat: false, // 是否长按不放的重复触发
});
注意
- 按下有值的键盘时,先触发 keydown 事件,再触发 keypress 事件
- 一直按键不松开,会连续触发键盘事件:keydown,keypress,keydown,keypress...
3. 原型属性
| 原型属性 | 描述 |
|---|---|
| key | 返回键名 |
| code | 返回键码 |
| location | 返回键在键盘所处的区域: 0 主区域或无法判断的区域, 1 左侧(只适用有两个位置的键,如 Ctrl 和 Shift), 2 右侧(规则同左侧), 3 数字小键盘区域 |
| ctrlKey | 返回是否按下了 Ctrl 键 |
| shiftKey | 返回是否按下了 Shift 键 |
| altKey | 返回是否按下了 Alt 键 |
| metaKey | 返回是否按下了 Meta 键(Windows 键) |
| repeat | 返回是否长按不放的重复触发 |
4. 原型方法
| 原型方法 | 描述 |
|---|---|
| getModifierState(keyStr) | 根据功能键字符串,返回是否有按下该按键 |
InputEvent 类
1. 事件类型
input:输入值变化
(触发对象:<input>、<select>、<textarea>对象)
2. 创建对象
输入值变化行为创建
如
<input>、<select>、<textarea>的值发生变化脚本创建
// 参数1:事件类型
// 参数2:配置对象(可选)
var event = new InputEvent("事件类型", {
..., // Event 参数
inputType: "", // 变化类型
data: null, // 手动插入的字符串(其他情况返回 null)
dataTransfer: null, // DataTransfer 对象???
});
3. 原型属性
| 原型属性 | 描述 |
|---|---|
| inputType | 返回变化类型: insertText 手动插入,insertFromPaste 粘贴插入, deleteContentBackward 向后删除,deleteContentForward 向前删除 |
| data | 返回手动插入的字符串(其他情况返回 null) |
| dataTransfer | 返回 DataTransfer 对象??? |
Touch 类
触摸事件 - JavaScript 教程 - 网道 (wangdoc.com)
1. 创建对象
- 触摸行为创建
- 脚本创建
var touch = new Touch({
identifier: 0, // 触摸点的唯一 ID
target: null, // 触摸点开始时所在的元素节点
clientX: 0, // 触摸点相对于浏览器窗口左侧的水平距离(可选)
clientY: 0, // 触摸点相对于浏览器窗口上测的垂直距离(可选)
screenX: 0, // 触摸点相对于屏幕左侧的水平距离(可选)
screenY: 0, // 触摸点相对于屏幕上侧的垂直距离(可选)
pageX: 0, // 触摸点相对于文档左侧的水平距离(可选)
pageY: 0, // 触摸点相对于文档上侧的垂直距离(可选)
radiusX: 0, // 触摸点周围受到影响的椭圆范围的 X 轴半径(可选)
radiusY: 0, // 触摸点周围受到影响的椭圆范围的 Y 轴半径(可选)
rotationAngle: 0, // 触摸区域的椭圆的旋转角度,单位deg,取值0~90(可选)
force: 0: // 触摸压力,取值0~1(可选)
});
2. 原型属性
| 原型属性 | 描述 |
|---|---|
| identifier | 返回触摸点的唯一 ID |
| target | 返回触摸点开始时所在的元素节点 |
| clientX | 返回触摸点相对于浏览器窗口左侧的水平距离 |
| clientY | 返回触摸点相对于浏览器窗口上测的垂直距离 |
| screenX | 返回触摸点相对于屏幕左侧的水平距离 |
| screenY | 返回触摸点相对于屏幕上侧的垂直距离 |
| pageX | 返回触摸点相对于文档左侧的水平距离 |
| pageY | 返回触摸点相对于文档上侧的垂直距离 |
| radiusX | 返回触摸点周围受到影响的椭圆范围的 X 轴半径 |
| radiusY | 返回触摸点周围受到影响的椭圆范围的 Y 轴半径 |
| rotationAngle | 返回触摸区域的椭圆的旋转角度,单位deg,取值0~90 |
| force | 返回触摸压力,取值0~1 |
TouchList 类
1. 原型属性
| 原型属性 | 描述 |
|---|---|
| length | 成员数量 |
2. 原型方法
| 原型属性 | 描述 |
|---|---|
| item() | 返回指定位置的成员 |
TouchEvent 类
1. 事件类型
touchstart:触摸开始touchend:触摸结束touchmove:触摸移动touchcancel:触摸取消(如跳出弹窗,移动离开文档区域等)
(触发对象:触摸所在的位置的元素对象)
2. 创建对象
- 触摸行为创建
- 脚本创建
// 参数1:事件类型
// 参数2:配置对象(可选)
var event = new TouchEvent("事件类型", {
..., // Event 参数
touches: [], // 当前处于活跃状态的触摸点的 TouchList 对象
targetTouches: [], // 所有处在触摸的目标元素节点内部、且仍然处于活动状态的触摸点的 TouchList 对象
changedTouches: [], // 本次触摸事件的相关触摸点的 TouchList 对象
ctrlKey: false, // 是否同时按下了 Ctrl 键
shiftKey: false, // 是否同时按下了 Shift 键
altKey: false, // 是否同时按下了 Alt 键
metaKey: false, // 是否同时按下了 Meta 键(Windows 键)
});
3. 原型属性
| 原型属性 | 描述 |
|---|---|
| touches | 返回当前处于活跃状态的触摸点的 TouchList 对象 |
| targetTouches | 返回所有处在触摸的目标元素节点内部、且仍然处于活动状态的触摸点的 TouchList 对象 |
| changedTouches | 返回本次触摸事件的相关触摸点的 TouchList 对象,对于不同事件的含义如下 touchstart 事件:被激活的触摸点 touchmove 事件:发生变化的触摸点 touchend 事件:消失的触摸点 |
| ctrlKey | 返回是否同时按下了 Ctrl 键 |
| shiftKey | 返回是否同时按下了 Shift 键 |
| altKey | 返回是否同时按下了 Alt 键 |
| metaKey | 返回是否同时按下了 Meta 键(Windows 键) |
DragEvent 类
拖拉事件 - JavaScript 教程 - 网道 (wangdoc.com)
图片、链接、选中的文字默认可拖拉,元素节点默认不可拖拉,可通过修改节点对象的 draggable 属性的布尔值来决定是否可拖拉。当为可拖拉时,就无法再用鼠标选中该节点内部的文字或子节点了。
1. 事件类型
(1)被拖拉的节点上触发
drag:拖拉中(持续触发,相隔几百毫秒)dragstart:拖拉开始dragend:拖拉结束
(2)拖拉到达的目标节点上触发
dragenter:拖拉进入目标节点dragover:拖拉到目标节点上方(持续触发,相隔几百毫秒)dragleave:拖拉离开目标节点drop:释放到目标节点
注意
- 按 ESC 键取消拖拉,不会触发 drop 事件;
- 释放鼠标(不管是否跨窗口),按 ESC 键取消拖拉,总是会触发 dragend 事件;
- 拖拉过程中,mousemove 事件不会触发;
2. 创建对象
- 拖拉行为创建
- 脚本创建
// 参数1:事件类型
// 参数2:配置对象(可选)
var event = new DragEvent("事件类型", {
..., // MouseEvent 参数
dataTransfer: null, // 携带数据的 DataTransfer 对象
});
3. 原型属性
| 原型属性 | 描述 |
|---|---|
| dataTransfer | 返回携带数据的 DataTransfer 对象 |
DataTransfer 类
1. 创建对象
- 拖拉行为创建
- 剪贴板行为创建
- 脚本创建
var dataTrans = new DataTransfer();
2. 原型属性
| 原型属性 | 描述 |
|---|---|
| dropEffect | 设置/查看目标节点允许的拖拉效果,只在 dragover 事件中设置有效 copy:复制 move:移动 link:链接 none:禁止(默认) |
| effectAllowed | 设置/查看被拖拉节点允许的拖拉效果,只在 dragstart 事件中设置有效 copy:复制 move:移动 link:链接 copyLink:复制,链接 copyMove:复制,移动 linkMove:链接,移动 all:复制,移动,链接 uninitialized:同 all(默认) none:禁止 |
| files | 返回被拖拉文件成员的 FileList 对象,不涉及文件时为 null |
| types | 返回被拖拉成员的数据格式(MIME 字符串)的数组 |
| items | 返回被拖拉成员的 DataTransferItemList 对象 |
注意
目标节点默认不允许 drop 事件,触发 drop 的条件如下:
- 在 dragover 中执行
event.preventDefault(); - effectAllowed 不能为 none;
- dropEffect 可以不设置,当有设置时,需要和 effectAllowed 对应一致;
3. 原型方法
| 原型方法 | 描述 |
|---|---|
| setData(type, data) | 设置拖拉事件所带有的数据,无则添加,有则替换 |
| getData(type) | 返回拖拉事件所带的指定类型的数据 |
| clearData([type]) | 移除拖拉事件所带的指定类型的数据,无指定类型则移除全部数据 (该方法不会移除被拖拉的文件,且只能在 dragstart 事件中监听) |
| setDragImage(image, x, y) | 自定义拖拉过程中跟随鼠标移动的图片(默认是被拖拉节点的外观) |
DataTransferItemList 类
1. 原型属性
| 原型属性 | 描述 |
|---|---|
| length | 成员数量 |
2. 原型方法
| 原型方法 | 描述 |
|---|---|
| add(data, type) add(file) | 增加一个指定内容和类型作为成员 增加一个文件作为成员 |
| remove(index) | 移除指定位置的成员 |
| clear() | 移除指定位置的成员 |
DataTransferItem 类
1. 原型属性
| 原型属性 | 描述 |
|---|---|
| kind | 返回成员的种类:string,file |
| type | 返回成员的类型(MIME 字符串) |
2. 原型方法
| 原型方法 | 描述 |
|---|---|
| getAsFile() | 如果是文件,则返回该文件,否则返回 null |
| getAsString(callback) | 如果被拖拉的是字符串,将该字符传入指定的回调函数处理 |
BeforeUnloadEvent 类
1. 事件类型
beforeunload:资源卸载前
(触发对象:window,img,link,script 等资源相关对象)
2. 原型属性
| 原型属性 | 描述 |
|---|---|
| returnValue | 未非空字符串时,浏览器会弹出对话框询问是否卸载该资源(实测无效) |
PageTransitionEvent 类
1. 事件类型
pageshow:页面加载完成pagehide:页面卸载时
(触发对象:window 对象)
注意
pageshow / pagehide 与 load / unload 区别
- pageshow 在 load 之后,从缓存加载时 load 不触发
- 定义 unload 监听函数后,页面不会保存在缓存中
- 如果 pagehide 设置了要缓存则 unload 无效,设置了不缓存则 unload 才会在 pagehide 之后立即执行
2. 原型属性
| 原型属性 | 描述 |
|---|---|
| persisted | pageshow 事件:true 页面来自缓存,false 页面初次加载(只读) pagehide 事件:true 页面保存至缓存,false 页面不保存至缓存 |
PopStateEvent 类
1. 事件类型
popstate:history 记录切换时触发(点击“后退/前进”按钮切换,或调用history.back()、history.forward()、history.go())
(触发对象:window 对象)
2. 原型属性
| 原型属性 | 描述 |
|---|---|
| state | 返回 history 的 pushState / replaceState 方法为当前记录添加的 state 对象 |
HashChangeEvent 类
1. 事件类型
hashchange:hash 变化时触发
(触发对象:window 对象)
2. 创建对象
- hash变化行为创建
- 脚本创建
// 参数1:事件类型
// 参数2:配置对象(可选)
var event = new HashChangeEvent("事件类型", {
..., // Event 参数
oldURL: "", // 变化前 url
newURL: "", // 变化后 url
});
3. 原型属性
| 原型属性 | 描述 |
|---|---|
| oldURL | 返回变化前 url |
| newURL | 返回变化后 url |
ClipboardEvent 类
1. 事件类型
cut:剪切copy:复制paste:粘贴
(触发对象:焦点所在的元素对象)
2. 原型属性
| 原型属性 | 描述 |
|---|---|
| clipboardData | 返回携带数据的 DataTransfer 对象 |
FocusEvent 类
1. 事件类型
focus:获得焦点后(不会冒泡)blur:失去焦点后(不会冒泡)focusin:将要获得焦点(在 focus 之前,会冒泡)focusout:将要失去焦点(在 blur 之前,会冒泡)
(触发对象:可以获取焦点的元素对象)
2. 原型属性
| 原型属性 | 描述 |
|---|---|
| relatedTarget | focusin 事件:返回将要失去焦点的元素对象 focusout 事件:返回将要获取焦点的元素对象 focus 和 blur 事件:返回 null |
ProgressEvent 类
进度事件 - JavaScript 教程 - 网道 (wangdoc.com)
1. 事件类型
loadstart:加载开始progress:加载中(持续触发)load:加载成功abort:加载中止,比如用户取消(当发生错误导致中止时不会触发)error:加载错误timeout:加载超时loadend:加载结束(在 load,abort,error 等事件之后触发)
2. 创建对象
资源传输行为创建
如文件上传,AJAX 请求,资源加载等
脚本创建
// 参数1:事件类型
// 参数2:配置对象(可选)
var event = new ProgressEvent("事件类型", {
..., // Event 参数
lengthComputable: false, // 加载的总量是否可以计算
loaded: 0, // 已经加载的量
total: 0, // 需要加载的总量
});
注意
有时资源加载会在脚本运行之前就完成,尤其是脚本放在文档底部的时候,因此最好把事件监听函数写在节点 HTML 代码中,才能保证一定会执行。
3. 原型属性
| 原型属性 | 描述 |
|---|---|
| lengthComputable | 返回加载的总量是否可以计算 |
| loaded | 返回已经加载的量 |
| total | 返回需要加载的总量 |
StorageEvent 类
1. 事件类型
storage:当前窗口 localStorage 或 sessionStoage 的数据变化
(触发对象:window 对象)
注意
storage 事件在 Storage 数据发生变化的窗口不触发,只在其他同域窗口触发。
2. 创建对象
Storage 数据变化行为创建
脚本创建
// 参数1:事件类型
// 参数2:配置对象(可选)
var event = new StorageEvent("事件类型", {
..., // Event 参数
storageArea: null, // 被操作的 storage 对象
key: null, // 被修改的键值
newValue: null, // 被修改后的新值
oldValue: null, // 被修改前的旧值
url: null, // 触发变化的 URL
});
3. 原型属性
| 原型属性 | 描述 |
|---|---|
| storageArea | 返回被操作的 storage 对象 |
| key | 返回被修改的键值 |
| newValue | 返回被修改后的新值 |
| oldValue | 返回被修改前的旧值 |
| url | 返回触发变化的 URL |
MessageEvent 类
1. 事件类型
message:接收消息
(触发对象:window 对象)
2. 创建对象
接收消息行为创建
脚本创建
// 参数1:事件类型
// 参数2:配置对象(可选)
var event = new StorageEvent("事件类型", {
..., // Event 参数
storageArea: null, // 被操作的 storage 对象
key: null, // 被修改的键值
newValue: null, // 被修改后的新值
oldValue: null, // 被修改前的旧值
url: null, // 触发变化的 URL
});
3. 原型属性
| 原型属性 | 描述 |
|---|---|
| storageArea | 返回被操作的 storage 对象 |
| key | 返回被修改的键值 |
| newValue | 返回被修改后的新值 |
| oldValue | 返回被修改前的旧值 |
| url | 返回触发变化的 URL |
TransitionEvent 类
1. 事件类型
transitionstart:过渡开始transitionend:过渡结束
TODO
AnimationEvent 类
1. 事件类型
animationstart:动画开始animationend:动画结束
TODO
CustomEvent 类
自定义事件
1. 创建对象
// 参数1:事件类型
// 参数2:配置对象(可选)
var event = new CustomEvent("自定义事件类型", {
..., // Event 参数
detail: null, // 附带数据
});
2. 原型属性
| 原型属性 | 描述 |
|---|---|
| detail | 附带数据 |
