Skip to main content

事件处理 API 汇总

一、鼠标事件​

1、click​

在元素上按下并释放任意鼠标按键时触发。

button.addEventListener('click', event => {
button.textContent = `Click count: ${event.detail}`;
});

2、dblclick​

在元素上双击鼠标按钮时触发。

card.addEventListener('dblclick', function (e) {
card.classList.toggle('large');
});

3、contextmenu​

右键点击时触发(在右键菜单显示前触发)

noContext.addEventListener('contextmenu', e => {
e.preventDefault();
});

4、mousedown​

在元素上按下任意鼠标按钮时触发。

button.addEventListener('mousedown', event => { ... });

5、mouseup​

在元素上释放任意鼠标按键时触发。

button.addEventListener('mouseup', event => { ... });

6、mouseover​

当鼠标移入某元素时触发,移入和移出其子元素时也会触发。

button.addEventListener('mouseover', event => { ... });

7、mouseenter​

当鼠标移入某元素时触发。

button.addEventListener('mouseenter', event => { ... });

8、mousemove​

鼠标在某元素上移动时触发,即使在其子元素上也会触发。

button.addEventListener('mousemove', event => { ... });

9、mouseout​

指针移出元素,或者移到它的子元素上时触发。

button.addEventListener('mouseout', event => { ... });

10、mouseleave​

指针移出元素范围外时触发(不冒泡)

button.addEventListener('mouseleave', event => { ... });

11、pointerlockchange​

鼠标被锁定或者解除锁定发生时触发。

document.onpointerlockchange = (event) => {
console.log('Pointer lock changed');
};
// 或
document.addEventListener('pointerlockchange', (event) => {
console.log('Pointer lock changed');
});

12、pointerlockerror​

可能因为一些技术的原因鼠标锁定被禁止时触发。

document.onpointerlockerror = (event) => {
console.log('Error locking pointer');
};
// 或
document.addEventListener('pointerlockerror', (event) => {
console.log('Error locking pointer');
});

13、select​

有文本被选中时触发。

input.addEventListener('select', event => { ... });

14、wheel​

滚轮向任意方向滚动时触发。

el.addEventListener('wheel', event => { ... });

二、键盘事件​

1、keydown​

按下任意按键时触发。

document.onkeydown = event => { ... };
// 或
document.addEventListener('keydown', event => { ... });

「点击获取 KeyCode」

2、keyup​

释放任意按键时触发。

document.onkeyup = event => { ... };
// 或
document.addEventListener('keyup', event => { ... });

三、输入框事件​

1、focus​

元素获得焦点时触发(不会冒泡)

input.onfocus = event => { ... };
// 或
input.addEventListener('focus', event => { ... });

2、blur​

元素失去焦点时触发(不会冒泡)

input.onblur = event => { ... };
// 或
input.addEventListener('blur', event => { ... });

3、input​

在用户输入时触发。

input.oninput = event => { ... };
// 或
input.addEventListener('input', event => { ... });

4、compositionstart​

组合输入开始时触发。

input.addEventListener('compositionstart', event => { ... });

「点击查看组合输入使用详情」

5、compositionupdate​

组合输入每个字符时触发。

input.addEventListener('compositionupdate', event => { ... });

「点击查看组合输入使用详情」

6、compositionend​

组合输入结束时触发。

input.addEventListener('compositionend', event => { ... });

「点击查看组合输入使用详情」

四、剪贴板事件​

1、cut​

在用户剪切元素的内容时触发。

p.oncut = event => { ... };
// 或
p.addEventListener('cut', event => { ... });

2、copy​

在用户拷贝元素上的内容时触发。

p.oncopy = event => { ... };
// 或
p.addEventListener('copy', event => { ... });

3、paste​

在用户向元素中粘贴文本时触发。

p.onpaste = event => { ... };
// 或
p.addEventListener('paste', event => { ... });

五、拖放事件​

1、dragstart​

用户开始拖动元素时触发。

document.ondragstart = event => { ... };
// 或
document.addEventListener('dragstart', event => { ... });

2、drag​

在元素或者选取的文本被拖动时触发(每 350ms 持续触发)

document.ondrag = event => { ... };
// 或
document.addEventListener('drag', event => { ... });

3、dragenter​

当被拖动的元素进入其容器范围内时触发此事件。

// 当被拖动的元素进入类名为 droptarget 的元素时,改变其的边框样式
document.ondragenter = event => { ... };
// 或
document.addEventListener("dragenter", function (event) {
if (event.target.className == "droptarget") {
event.target.style.border = "3px dotted #000";
}
});

6、dragover​

当被拖动的元素在另一对象容器范围内拖动时触发此事件(每 350ms 持续触发)

// 当被拖动的元素在类名为 droptarget 的元素持续拖动时,改变其的边框样式
document.ondragover = event => { ... };
// 或
document.addEventListener("dragover", function (event) {
if (event.target.className == "droptarget") {
event.target.style.border = "3px dotted red";
}
});

5、dragleave​

当被拖动的元素离开其容器范围内时触发此事件。

// 当被拖动的元素离开类名为 droptarget 的元素时,重置其的边框样式
document.ondragleave = event => { ... };
// 或
document.addEventListener("dragleave", function (event) {
if (event.target.className == "droptarget") {
event.target.style.border = "";
}
});

运行效果如上面动图。

6、drop​

在一个拖动过程中,释放鼠标键时触发此事件。

document.ondrop = event => { ... };
// 或
document.addEventListener('drop', event => { ... });

7、dragend​

用户完成元素拖动后触发(松开鼠标按钮或按下 Esc 键)

document.ondragend = event => { ... };
// 或
document.addEventListener('dragend', event => { ... });

六、窗口视图事件​

1、fullscreenchange​

以全屏模式查看元素时触发。

document.onfullscreenchange = event => { ... };
// 或
document.addEventListener('fullscreenchange', event => { ... });

2、fullscreenerror​

在无法在全屏模式下查看元素时触发。

document.onfullscreenerror = event => { ... };
// 或
document.addEventListener('fullscreenerror', event => { ... });

3、resize​

当调整浏览器窗口的大小时触发。

window.onresize = event => { ... };
// 或
window.addEventListener('resize', event => { ... });

4、scroll​

当用户滚动指定的元素时触发。

document.onscroll = event => { ... };
// 或
document.addEventListener('scroll', event => { ... });

七、CSS 动画及过渡事件​

JS 可监听动画的开始、重复及结束,还可监听 transition 过渡动画是否完成。

1、animationstart​

CSS 动画开始时触发。

div.addEventListener('animationstart', event => { ... });

2、animationend​

CSS 动画完成时触发。

div.addEventListener('animationend', event => { ... });

3、animationiteration​

CSS 动画重复播放时触发。

div.addEventListener('animationiteration', event => { ... });

4、transitionend​

CSS 过渡完成时触发。

div.addEventListener('transitionend', event => { ... });

八、表单事件​

1、reset​

点击重置按钮时触发。

form.addEventListener('reset', event => { ... });

2、submit​

点击提交按钮时触发。

form.addEventListener('submit', event => { ... });

九、打印事件​

1、beforeprint​

打印机已经就绪时触发。

window.onbeforeprint = event => { ... };
// 或
window.addEventListener('beforeprint', event => { ... });

2、afterprint​

打印机关闭时触发。

window.onafterprint = event => { ... };
// 或
window.addEventListener('afterprint', event => { ... });

十、媒体事件​

1、loadstart​

当浏览器开始寻找指定的音频/视频时触发,即当加载过程开始时。

audio.onloadstart = event => { ... };
// 或
audio.addEventListener('loadstart', event => { ... });

2、durationchange​

当指定音频/视频的时长数据发生变化时触发。

audio.ondurationchange = event => { ... };
// 或
audio.addEventListener('durationchange', event => { ... });

3、loadedmetadata​

当指定的音频/视频的元数据已加载时触发。

audio.onloadedmetadata = event => { ... };
// 或
audio.addEventListener('loadedmetadata', event => { ... });

4、loadeddata​

当当前帧的数据已加载,但没有足够的数据来播放指定音频/视频的下一帧时触发。

audio.onloadeddata = event => { ... };
// 或
audio.addEventListener('loadeddata', event => { ... });

5、progress​

当浏览器正在下载指定的音频/视频时触发。

audio.onprogress = event => { ... };
// 或
audio.addEventListener('progress', event => { ... });

6、canplay​

当浏览器能够开始播放指定的音频/视频时触发。

audio.oncanplay = event => { ... };
// 或
audio.addEventListener('canplay', event => { ... });

7、canplaythrough​

当浏览器预计能够在不停下来进行缓冲的情况下持续播放指定的音频/视频时触发。

audio.oncanplaythrough = event => { ... };
// 或
audio.addEventListener('canplaythrough', event => { ... });

十一、资源加载事件​

1、load​

资源及其相关资源已完成加载时触发。

window.addEventListener('load', event => { ... });

2、abort​

正在加载资源已经被中止时触发。

video.addEventListener('abort', event => { ... });

3、error​

资源加载失败时触发。

img.addEventListener('error', event => { ... });

4、beforeunload​

window,document 及其资源即将被卸载时触发。

window.addEventListener('beforeunload', event => { ... });

5、unload​

文档或一个依赖资源正在被卸载时触发。

window.addEventListener('unload', event => { ... });

十二、网络与 WebSocket 事件​

1、online​

浏览器已获得网络访问时触发。

window.ononline = event => { ... };
// 或
window.addEventListener('online', event => { ... });

2、offline​

浏览器已失去网络访问时触发。

window.onoffline = event => { ... };
// 或
window.addEventListener('offline', event => { ... });

3、open​

WebSocket 连接已建立时触发。

// Create WebSocket connection.
const socket = new WebSocket('ws://localhost:8080');

// Connection opened
socket.addEventListener('open', (event) => {
socket.send('Hello Server!');
});

4、message​

通过 WebSocket 接收到一条消息时触发。

// Create WebSocket connection.
const socket = new WebSocket('ws://localhost:8080');

// Listen for messages
socket.addEventListener('message', function (event) {
console.log('Message from server ', event.data);
});

5、close​

WebSocket 连接已关闭时触发。

exampleSocket.addEventListener('close', (event) => {
console.log('The connection has been closed successfully.');
});