当前位置:首页 > JavaScript

js事件实现

2026-03-15 12:03:02JavaScript

事件绑定方法

使用 addEventListener 绑定事件是最推荐的方式,支持多个事件处理函数且可精确控制事件阶段。语法如下:

element.addEventListener(eventType, handler, useCapture);

on[event] 属性直接赋值是传统方式,但会覆盖已有处理函数:

element.onclick = function() { console.log('Clicked'); };

事件对象常用属性

事件处理函数接收的 event 对象包含关键信息:

  • event.target:触发事件的原始元素
  • event.currentTarget:当前处理事件的元素(绑定处理函数的元素)
  • event.stopPropagation():阻止事件冒泡
  • event.preventDefault():阻止默认行为

事件委托模式

通过冒泡机制在父元素处理子元素事件,适合动态内容:

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

自定义事件触发

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

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

常用事件类型

鼠标事件:

  • click:元素被点击
  • mouseenter/mouseleave:指针进入/离开元素区域
  • mousemove:指针在元素内移动

键盘事件:

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

表单事件:

  • submit:表单提交
  • change:表单控件值改变
  • focus/blur:元素获得/失去焦点

性能优化技巧

使用事件委托减少监听器数量,对频繁触发的事件(如scrollmousemove)进行节流:

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

window.addEventListener('scroll', throttle(function() {
  console.log('Scrolling');
}, 200));

移动端特殊事件

触摸事件:

  • touchstart:手指触摸屏幕
  • touchmove:手指在屏幕上滑动
  • touchend:手指离开屏幕

手势事件:

  • gesturestart:多指触摸开始
  • gesturechange:手指间距或角度变化
  • gestureend:多指触摸结束

事件移除方式

使用 removeEventListener 移除事件需保持参数一致:

js事件实现

const handler = function() { console.log('Event'); };
element.addEventListener('click', handler);
// 后续移除
element.removeEventListener('click', handler);

标签: 事件js
分享给朋友:

相关文章

js实现跳转

js实现跳转

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

js实现瀑布流

js实现瀑布流

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

js实现百叶窗

js实现百叶窗

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

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…