摘要:在本教程中,您将学习有关 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()触发事件。
本教程对您有帮助吗?