点击
当前位置:首页 > JavaScript

js 事件 如何实现

2026-03-15 16:34:50JavaScript

事件绑定方法

DOM 元素属性绑定 通过 HTML 元素的 on[event] 属性直接绑定事件:

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

DOM 对象属性绑定 通过 JavaScript 直接为 DOM 对象的事件属性赋值:

document.getElementById('myBtn').onclick = function() {
  console.log('Button clicked');
};

事件监听器

addEventListener 标准的事件监听方法,支持多个监听器:

element.addEventListener('click', function(event) {
  // 事件处理逻辑
});

removeEventListener 移除事件监听时需要保持函数引用一致:

const handler = () => console.log('Event');
element.addEventListener('click', handler);
element.removeEventListener('click', handler);

事件对象

常用属性

  • target:触发事件的元素
  • currentTarget:绑定事件的元素
  • type:事件类型
  • preventDefault():阻止默认行为
  • stopPropagation():阻止事件冒泡

事件委托

利用事件冒泡机制在父元素上处理子元素事件:

document.getElementById('parent').addEventListener('click', function(event) {
  if(event.target.classList.contains('child')) {
    // 处理子元素事件
  }
});

自定义事件

创建和触发自定义事件:

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

// 监听事件
document.addEventListener('build', function(e) {
  console.log('自定义事件:', e.detail);
});

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

常见事件类型

鼠标事件

  • click:单击
  • dblclick:双击
  • mouseenter/mouseleave:进入/离开元素
  • mousemove:鼠标移动

键盘事件

  • keydown:按键按下
  • keyup:按键释放
  • keypress:按键按下(已弃用)

表单事件

  • submit:表单提交
  • change:值改变
  • focus/blur:获取/失去焦点

性能优化

事件节流 限制事件触发频率:

function throttle(func, delay) {
  let lastCall = 0;
  return function(...args) {
    const now = new Date().getTime();
    if(now - lastCall < delay) return;
    lastCall = now;
    return func.apply(this, args);
  };
}

window.addEventListener('resize', throttle(function() {
  console.log('Resize event');
}, 200));

被动事件监听器 提升滚动性能:

js 事件 如何实现

window.addEventListener('scroll', function() {
  // 处理逻辑
}, { passive: true });

分享给朋友:

相关文章

vue如何实现放大缩小

vue如何实现放大缩小

Vue 实现放大缩小功能 在 Vue 中实现放大缩小功能可以通过多种方式实现,以下介绍几种常见的方法: 使用 CSS transform 缩放 通过绑定 CSS 的 transform: scale…

Vue如何实现多级域名

Vue如何实现多级域名

Vue 实现多级域名的方法 Vue 本身是一个前端框架,多级域名的实现通常需要结合后端配置和前端路由。以下是几种常见的方法: 使用路由动态匹配 在 Vue Router 中可以通过动态路由参数匹配…

vue实现长按事件

vue实现长按事件

实现长按事件的基本思路 在Vue中实现长按事件,可以通过监听mousedown和touchstart事件启动计时器,并在mouseup、mouseleave或touchend事件中清除计时器。如果计时…

react如何实现keepalive

react如何实现keepalive

React 实现 KeepAlive 的方法 React 本身没有内置的 KeepAlive 组件,但可以通过以下方式模拟类似功能,实现组件状态保持或避免重复渲染。 使用 CSS 隐藏组件 通过 C…

react如何实现菜单

react如何实现菜单

使用 React 实现菜单的方法 使用状态管理控制菜单显示/隐藏 通过 useState 管理菜单的展开和收起状态,结合点击事件切换状态。 import { useState } from 'rea…

jquery鼠标事件

jquery鼠标事件

jQuery鼠标事件概述 jQuery提供了一系列鼠标事件处理方法,用于响应用户的鼠标操作,如点击、悬停、移动等。这些事件通过简洁的语法绑定到DOM元素,实现交互功能。 常用鼠标事件方法 cl…