当前位置:首页 > 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对象参数,包含事件相关信息:

js实现监听

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);

事件委托

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

js实现监听

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包装事件监听:

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实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…