当前位置:首页 > JavaScript

js 监听实现

2026-01-31 22:07:51JavaScript

事件监听基础方法

使用 addEventListener 是标准的事件监听方式,支持多个监听器且可精确控制事件流阶段。语法如下:

element.addEventListener(eventType, callback, options);

eventType 为字符串(如 "click"),callback 是事件触发时执行的函数。options 可指定 capture(捕获阶段触发)或 passive(不阻止滚动优化性能)。

移除事件监听

通过 removeEventListener 移除监听时需确保参数与添加时完全一致:

const handler = () => console.log('Clicked');
element.addEventListener('click', handler);
element.removeEventListener('click', handler); // 成功移除

事件委托优化

利用事件冒泡机制在父元素监听子元素事件,适合动态内容或大量子元素:

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

自定义事件触发

创建并派发自定义事件实现组件间通信:

const event = new CustomEvent('customEvent', { detail: { data: 'example' } });
element.dispatchEvent(event);

element.addEventListener('customEvent', (e) => {
  console.log(e.detail.data); // 输出: example
});

性能注意事项

频繁触发的事件(如 scrollresize)应使用防抖或节流:

function debounce(fn, delay) {
  let timer;
  return (...args) => {
    clearTimeout(timer);
    timer = setTimeout(() => fn(...args), delay);
  };
}

window.addEventListener('resize', debounce(() => {
  console.log('Resize handler');
}, 200));

被动事件监听

标记 { passive: true } 提升滚动性能,但此时无法调用 preventDefault()

js 监听实现

window.addEventListener('touchstart', handler, { passive: true });

标签: js
分享给朋友:

相关文章

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js 实现图片轮播

js 实现图片轮播

基础实现方案 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS负责样式布局,JavaScript处理轮播逻辑。 <div class="…

js尚未实现

js尚未实现

JavaScript 尚未实现的功能 JavaScript 作为一门不断发展的语言,仍有一些功能尚未被原生支持或标准化。以下是一些常见的尚未实现的功能或特性: Promise.any() 的替代方案…