JavaScript常用事件大全:从基础到实战应用

更新日期: 2025-08-06阅读: 348标签: 事件

JavaScript事件是网页交互的核心。本文将全面介绍常用事件类型及其实际应用场景,帮助开发者快速掌握事件处理技巧。


一、鼠标事件(8种核心操作)

事件名称触发时机使用示例
click鼠标单击元素时触发按钮操作
dblclick鼠标双击元素时触发文件打开
mousedown鼠标按键按下瞬间触发拖拽开始
mouseup松开鼠标按键时触发拖拽结束
mouseover鼠标移入元素区域时触发菜单展开
mousemove鼠标在元素内移动时持续触发绘图工具
mouseout鼠标移出元素区域时触发提示隐藏
mouseenter鼠标进入元素时触发(不冒泡)动画开始

实际应用技巧:

// 实现简单绘图板
const canvas = document.getElementById('drawing-board');
canvas.addEventListener('mousedown', startDrawing);
canvas.addEventListener('mousemove', draw);
canvas.addEventListener('mouseup', stopDrawing);


二、键盘事件(3种输入状态)

事件名称触发时机
keydown键盘按键按下瞬间触发
keyup松开键盘按键时触发
keypress按住按键持续触发(已废弃)

注意: 现代开发建议优先使用 keydown + keyup 组合


三、页面生命周期事件(6个关键节点)

window.addEventListener('load', () => {
  // 页面完全加载后执行(包括图片)
});

window.addEventListener('domContentLoaded', () => {
  // DOM解析完成时执行(无需等待资源)
});

window.addEventListener('beforeunload', (e) => {
  // 页面关闭前提醒用户保存数据
  e.preventDefault();
  return (e.returnValue = '确定离开吗?');
});

window.addEventListener('resize', () => {
  // 窗口大小变化时适配布局
});

window.addEventListener('scroll', () => {
  // 滚动时实现吸顶效果
});


四、表单事件(5种交互状态)

  1. focus:输入框获得焦点(如显示历史记录)

  2. blur:输入框失去焦点(如验证格式)

  3. change:值改变且失去焦点后(适合下拉菜单)

  4. input:值实时变化时触发(推荐替代keypress)

  5. submit:表单提交前验证(必须阻止默认行为)

验证代码示例:

document.getElementById('email').addEventListener('blur', function() {
  if (!this.value.includes('@')) {
    this.style.borderColor = 'red';
  }
});


五、现代事件类型(必学8种)

  1. touchstart/touchend:移动端触摸事件

  2. transitionend:css动画结束时触发

  3. visibilitychange:标签页切换时处理

  4. contextmenu:右键菜单自定义(需阻止默认)

  5. paste:粘贴板数据处理

  6. fullscreenchange:全屏模式切换

  7. online/offline:网络状态检测


六、高级事件处理技巧

  1. 事件委托: 动态元素处理终极方案

// 统一处理表格按钮
document.querySelector('#>).addEventListener('click', e => {
  if (e.target.classList.contains('delete-btn')) {
    deleteRecord(e.target.dataset.id);
  }
});
  1. 性能优化:滚动事件

// 滚动事件节流处理
let isScrolling;
window.addEventListener('scroll', () => {
  clearTimeout(isScrolling);
  isScrolling = setTimeout(() => {
    // 实际执行的操作
  }, 100);
});
  1. 自定义事件: 实现组件通信

// 创建事件
const refreshEvent = new Event('dataRefresh');

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

// 监听事件
document.addEventListener('dataRefresh', loadData);


实战建议(提升代码质量)

  1. 优先使用 addEventListener 替代 on* 属性

  2. 移动端务必添加 touch 事件支持

  3. 表单验证使用 input + blur 组合

  4. 页面卸载前使用 beforeunload 保存数据

  5. 高频事件(resize/scroll)必须做节流处理

根据MDN官方数据,现代浏览器对标准事件的兼容性已达98%以上(IE11除外),开发者可放心使用。

掌握这些事件机制,能显著提升用户交互体验。建议在实际项目中多练习事件委托和自定义事件的使用,这是构建复杂应用的关键技术

本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!

链接: https://fly63.com/article/detial/12882

js中addEventListener事件监听器参数详解

我们都知道addEventListener() 的参数约定是:useCapture是可选参数,默认值为false,目前DOM 规范做了修订:addEventListener() 的第三个参数可以是个对象值了。passive就是告诉浏览器我可不可以用stopPropagation...

js监听浏览器返回,pushState,popstate 事件,window.history对象

在WebApp或浏览器中,会有点击返回、后退、上一页等按钮实现自己的关闭页面、调整到指定页面、确认离开页面或执行一些其它操作的需求。可以使用 popstate 事件进行监听返回、后退、上一页操作。

CSS中的pointer-events属性实现点穿效果

具有层级关系的结构中,使用了pointer-events:none 属性将会使当前元素中的事件不会被捕获,从而实现了点穿的效果。而当代码示例中假如top元素具有子元素且显示指定pointer-events属性不为none的时候,top元素注册的事件将会被捕获/冒泡触发

js鼠标事件参数,获取鼠标在网页中的坐标

事件对象 event,JavaScript 将事件event作为参数传递,IE中把 event 事件对象作为全局对象 window 的一个属性,获取鼠标在网页中的坐标 = 鼠标在视窗中的坐标 + 浏览器滚动条坐标

js事件冒泡和默认事件处理(原生js、vue)

何为默认事件?比如 a 会跳转页面,submit 会提交表单等。普通js方法:e.preventDefault()函数。Vue.js方法: .prevent 是vue 的内置修饰符,调用了 event.preventDefault()阻止默认事件

js keyup、keypress和keydown事件 详解

js keyup、keypress和keydown事件都是有关于键盘的事件,当一个按键被pressed 或released在每一个现代浏览器中,都可能有三种客户端事件。

深入nodejs-核心模块Events详解(事件驱动)

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O的模型,使其轻量又高效。比如,文件操作中的fs事件流,网络编程所用到的tcp,http模块等,当你回想自己写的程序后,会发现很多操作都基于事件驱动,Events类。

纯CSS实现点击事件展现隐藏div菜单列表/元素切换

在写移动端导航的时候经常用到点击按钮出现/隐藏导航条的情况,最常见的方法当然还是前端框架直接调用,省心省力,不易出错;当然还有使用纯JS实现的小代码段。我这里整理了纯CSS实现方式,给需要的人和给自己做个笔记:实现原理利用CSS伪类:target

关于鼠标移动太快导致moseleave事件不触发的问题

我做的是一个table的编辑功能,当移入某行的时候展示编辑状态,在移出某行的时候显示的是原始状态,此时遇到一种情况,就是.当mousenter事件触发之后,由于鼠标移动得太快,同一个tr上绑定的mouseleave事件压根儿就没有执行。

Js事件传播流程

js事件传播流程主要分三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。在我们平常用的addEventListener方法中,一般只会用到两个参数,一个是需要绑定的事件,另一个是触发事件后要执行的函数

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!