当前位置:首页 > JavaScript

js监听实现

2026-03-15 00:10:29JavaScript

事件监听基础语法

在JavaScript中,使用addEventListener方法监听DOM事件。语法如下:

element.addEventListener(eventName, callbackFunction, [options]);
  • eventName:字符串,表示事件类型(如'click''keydown'
  • callbackFunction:事件触发时执行的回调函数
  • options:可选参数对象,可配置captureonce等特性

常见事件类型示例

// 点击事件
button.addEventListener('click', () => console.log('Button clicked'));

// 键盘事件
input.addEventListener('keydown', (e) => {
  if (e.key === 'Enter') console.log('Enter pressed');
});

// 鼠标移动事件
document.addEventListener('mousemove', (e) => {
  console.log(`Mouse at (${e.clientX}, ${e.clientY})`);
});

事件委托模式

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

ul.addEventListener('click', (e) => {
  if (e.target.tagName === 'LI') {
    console.log('List item clicked:', e.target.textContent);
  }
});

自定义事件触发

创建并派发自定义事件:

// 创建事件
const event = new CustomEvent('build', { detail: { time: Date.now() } });

// 监听事件
elem.addEventListener('build', (e) => {
  console.log('Custom event triggered:', e.detail);
});

// 触发事件
elem.dispatchEvent(event);

性能优化建议

  • 对频繁触发的事件(如scrollresize)使用防抖/节流
  • 不需要时及时移除监听器:removeEventListener
  • 避免在循环中重复添加相同监听器

移除事件监听

必须使用与添加时完全相同的参数引用:

js监听实现

function handleClick() { /* ... */ }

// 添加监听
button.addEventListener('click', handleClick);

// 移除监听
button.removeEventListener('click', handleClick);

标签: js
分享给朋友:

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现图片上传

js实现图片上传

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

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…