当前位置:首页 > JavaScript

js实现监听

2026-04-06 23:29:18JavaScript

事件监听基础

在JavaScript中,事件监听是通过addEventListener方法实现的。该方法允许为DOM元素添加事件处理函数,语法如下:

element.addEventListener(eventType, callbackFunction, options);
  • eventType:字符串,指定要监听的事件类型(如"click""keydown"
  • callbackFunction:事件触发时执行的函数
  • options:可选参数,可指定captureonce等配置

常用事件类型

  • 鼠标事件clickdblclickmouseentermouseleave
  • 键盘事件keydownkeyupkeypress
  • 表单事件submitchangefocusblur
  • 窗口事件resizescrollload

事件对象

回调函数接收一个event对象参数,包含事件相关信息:

element.addEventListener("click", function(event) {
  console.log(event.target); // 触发事件的元素
  console.log(event.clientX); // 鼠标X坐标
});

移除监听

使用removeEventListener移除已添加的监听器,需保持参数一致:

const handler = () => console.log("Clicked");
element.addEventListener("click", handler);
element.removeEventListener("click", handler);

事件委托

通过事件冒泡机制,在父元素上监听子元素的事件:

document.querySelector("#parent").addEventListener("click", (event) => {
  if (event.target.matches(".child")) {
    console.log("Child element clicked");
  }
});

自定义事件

可以创建和触发自定义事件:

const customEvent = new CustomEvent("myEvent", { detail: { data: 123 } });
element.addEventListener("myEvent", (e) => console.log(e.detail.data));
element.dispatchEvent(customEvent);

异步事件处理

使用Promise包装事件监听:

js实现监听

function waitForEvent(element, eventType) {
  return new Promise(resolve => {
    element.addEventListener(eventType, resolve, { once: true });
  });
}

await waitForEvent(button, "click");
console.log("Button clicked");

性能优化

  • 对高频事件(如scrollresize)使用防抖/节流
  • 避免匿名函数作为回调,以便于移除监听
  • 合理使用passive: true选项改善滚动性能

浏览器兼容性

  • 现代浏览器均支持addEventListener
  • IE8及以下需使用attachEvent方法(已废弃)
  • 推荐使用polyfill或转译工具处理兼容性问题

标签: js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…