当前位置:首页 > JavaScript

js event实现

2026-03-14 09:36:58JavaScript

Event 基本概念

JavaScript 中的事件是用户或浏览器与页面交互时触发的动作(如点击、滚动、键盘输入)。通过事件监听和处理器,可以实现交互逻辑。

事件监听方法

1. HTML 属性直接绑定
在 HTML 元素中通过 on[event] 属性直接绑定事件:

<button onclick="alert('Clicked!')">点击</button>

2. DOM 属性绑定
通过 JavaScript 为 DOM 元素的 on[event] 属性赋值:

const button = document.querySelector('button');
button.onclick = function() {
  console.log('Button clicked');
};

3. addEventListener
推荐方式,支持多个监听器且更灵活:

button.addEventListener('click', function(event) {
  console.log('Event triggered:', event.type);
});

事件对象

事件处理器接收 Event 对象参数,包含事件相关信息:

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

事件传播机制

事件分三个阶段:

  • 捕获阶段:从 window 向下传播到目标元素。
  • 目标阶段:到达目标元素。
  • 冒泡阶段:从目标元素向上冒泡到 window

通过 addEventListener 的第三个参数控制监听阶段(默认冒泡阶段):

// 捕获阶段监听
parent.addEventListener('click', () => console.log('Capture'), true);

// 冒泡阶段监听
child.addEventListener('click', () => console.log('Bubble'));

阻止默认行为

调用 event.preventDefault() 阻止默认行为(如链接跳转):

link.addEventListener('click', (event) => {
  event.preventDefault();
  console.log('Link click prevented');
});

阻止事件传播

  • event.stopPropagation():阻止事件继续传播(冒泡或捕获)。
  • event.stopImmediatePropagation():阻止当前元素的其他监听器执行。
child.addEventListener('click', (event) => {
  event.stopPropagation();
  console.log('Child click, propagation stopped');
});

事件委托

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

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

自定义事件

通过 CustomEvent 创建和触发自定义事件:

js event实现

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

element.addEventListener('customEvent', (e) => {
  console.log('Custom event data:', e.detail.data);
});

常用事件类型

  • 鼠标事件click, dblclick, mouseover, mouseout
  • 键盘事件keydown, keyup
  • 表单事件submit, change, focus
  • 窗口事件load, resize, scroll

示例代码

// 动态添加按钮事件
document.querySelectorAll('.btn').forEach(btn => {
  btn.addEventListener('mouseenter', () => {
    btn.style.backgroundColor = 'yellow';
  });
  btn.addEventListener('mouseleave', () => {
    btn.style.backgroundColor = '';
  });
});

通过结合事件监听、传播控制和委托机制,可以高效实现复杂的交互逻辑。

标签: jsevent
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

jquery js

jquery js

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

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…