摘要:在本教程中,您将学习有关 JavaScript 自定义事件的知识,例如创建自定义事件和派发它。
JavaScript 自定义事件简介
以下 函数 通过将元素的背景颜色更改为 yellow
来突出显示元素。
function highlight(elem) {
const bgColor = 'yellow';
elem.style.backgroundColor = bgColor;
}
Code language: JavaScript (javascript)
要执行在突出显示元素后执行的代码,您可能会想到一个 回调。
function highlight(elem, callback) {
const bgColor = 'yellow';
elem.style.backgroundColor = bgColor;
if(callback && typeof callback === 'function') {
callback(elem);
}
}
Code language: JavaScript (javascript)
以下调用 highlight()
函数并为 <div>
元素添加边框。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JS Custom Event Demo</title>
</head>
<body>
<div class="note">JS Custom Event Demo</div>
<script>
function highlight(elem, callback) {
const bgColor = 'yellow';
elem.style.backgroundColor = bgColor;
if (callback && typeof callback === 'function') {
callback(elem);
}
}
let note = document.querySelector('.note');
function addBorder(elem) {
elem.style.border = "solid 1px red";
}
highlight(note, addBorder);
</script>
</body>
</html>
Code language: HTML, XML (xml)
为了使代码更灵活,您可以使用自定义事件。
创建 JavaScript 自定义事件
要创建自定义事件,您使用 CustomEvent()
构造函数。
let event = new CustomEvent(eventType, options);
Code language: JavaScript (javascript)
CustomEvent()
具有两个参数。
eventType
是一个字符串,表示事件的名称。options
是一个对象,具有detail
属性,该属性包含有关事件的任何自定义信息。
以下示例显示了如何创建一个名为 highlight
的新自定义事件。
let event = new CustomEvent('highlight', {
detail: {backgroundColor: 'yellow'}
});
Code language: JavaScript (javascript)
派发 JavaScript 自定义事件
创建自定义事件后,您需要将事件附加到 DOM 元素,并使用 dispatchEvent()
方法触发它。
domElement.dispatchEvent(event);
Code language: JavaScript (javascript)
JavaScript 自定义事件示例
将所有内容整合在一起
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JavaScript Custom Event</title>
</head>
<body>
<div class="note">JS Custom Event</div>
<script>
function highlight(elem) {
const bgColor = 'yellow';
elem.style.backgroundColor = bgColor;
// create the event
let event = new CustomEvent('highlight', {
detail: {
backgroundColor: bgColor
}
});
// dispatch the event
elem.dispatchEvent(event);
}
// Select the div element
let div = document.querySelector('.note');
// Add border style
function addBorder(elem) {
elem.style.border = "solid 1px red";
}
// Listen to the highlight event
div.addEventListener('highlight', function (e) {
addBorder(this);
// examine the background
console.log(e.detail);
});
// highlight div element
highlight(div);
</script>
</body>
</html>
Code language: HTML, XML (xml)
工作原理
- 首先,声明
highlight()
函数,该函数突出显示元素并触发highlight
事件。 - 其次,使用
querySelector()
方法选择<div>
元素。 - 第三,侦听
highlight
事件。在事件侦听器内,调用addBorder()
函数并在控制台中显示detail
属性。 - 最后,调用
highlight()
函数,该函数将触发highlight
事件。
为什么要使用自定义事件
自定义事件允许您解耦您想要在另一段代码完成执行后执行的代码。例如,您可以将事件侦听器分离到单独的脚本中。此外,您可以在同一个自定义事件上有多个事件侦听器。
摘要
- 使用
CustomEvent()
构造函数创建自定义事件,并使用dispatchEvent()
触发事件。
本教程对您有帮助吗?