当前位置: 首页 > news >正文

全面解析浏览器事件系统

浏览器中的事件可以分为以下几类:

1. 鼠标事件

  • click: 鼠标点击事件
  • dblclick: 鼠标双击事件
  • mousedown: 鼠标按钮按下事件
  • mouseup: 鼠标按钮释放事件
  • mousemove: 鼠标移动事件
  • mouseover: 鼠标移入元素事件
  • mouseout: 鼠标移出元素事件
  • mouseenter: 鼠标进入元素事件
  • mouseleave: 鼠标离开元素事件

2. 键盘事件

  • keydown: 键盘按键按下事件
  • keyup: 键盘按键释放事件
  • keypress: 键盘按键按压事件(已废弃)

3. 表单事件

  • submit: 表单提交事件
  • reset: 表单重置事件
  • change: 表单元素值改变事件
  • input: 输入框内容改变事件
  • focus: 元素获得焦点事件
  • blur: 元素失去焦点事件

4. 窗口事件

  • load: 页面加载完成事件
  • unload: 页面卸载事件
  • beforeunload: 页面即将卸载事件
  • resize: 窗口大小改变事件
  • scroll: 页面滚动事件
  • DOMContentLoaded: DOM内容加载完成事件

5. 触摸事件

  • touchstart: 触摸开始事件
  • touchmove: 触摸移动事件
  • touchend: 触摸结束事件
  • touchcancel: 触摸取消事件

6. 拖拽事件

  • drag: 元素被拖拽时触发
  • dragstart: 拖拽开始事件
  • dragend: 拖拽结束事件
  • dragover: 拖拽元素在目标元素上移动事件
  • dragenter: 拖拽元素进入目标元素事件
  • dragleave: 拖拽元素离开目标元素事件
  • drop: 拖拽元素在目标元素上释放事件

7. 媒体事件

  • [play](javascript:void(0)): 媒体开始播放事件
  • pause: 媒体暂停事件
  • ended: 媒体播放结束事件
  • volumechange: 音量改变事件

8. 网络事件

  • online: 浏览器获得网络连接事件
  • offline: 浏览器失去网络连接事件

9. 存储事件

  • storage: Web Storage发生变化事件

10. 自定义事件

可以通过 CustomEvent 构造函数创建自定义事件,用于组件间通信。

浏览器事件系统补充

11. 页面生命周期事件

  • pageshow: 页面显示事件(包括从缓存中恢复)
  • pagehide: 页面隐藏事件
  • visibilitychange: 页面可见性改变事件
  • beforeprint: 打印前事件
  • afterprint: 打印后事件

12. 焦点事件

  • focusin: 元素即将获得焦点事件(支持冒泡)
  • focusout: 元素即将失去焦点事件(支持冒泡)

13. 剪贴板事件

  • copy: 复制事件
  • cut: 剪切事件
  • paste: 粘贴事件

14. 动画事件

  • animationstart: CSS动画开始事件
  • animationend: CSS动画结束事件
  • animationiteration: CSS动画重复事件

15. 过渡事件

  • transitionstart: CSS过渡开始事件
  • transitionend: CSS过渡结束事件
  • transitionrun: CSS过渡运行事件
  • transitioncancel: CSS过渡取消事件

16. WebSocket事件

  • open: WebSocket连接打开事件
  • message: 接收到消息事件
  • error: WebSocket错误事件
  • close: WebSocket连接关闭事件

17. Promise事件

  • unhandledrejection: 未处理的Promise拒绝事件
  • rejectionhandled: 已处理的Promise拒绝事件

18. History事件

  • popstate: 浏览历史改变事件
  • hashchange: URL哈希值改变事件

19. 设备相关事件

  • deviceorientation: 设备方向改变事件
  • devicemotion: 设备运动事件
  • orientationchange: 屏幕方向改变事件

20. 其他重要事件

  • error: JavaScript错误事件
  • abort: 资源加载被中止事件
  • loadstart: 资源开始加载事件
  • progress: 资源加载进度事件
  • loadend: 资源加载完成事件
  • timeout: 请求超时事件

事件传播机制

事件冒泡 (Event Bubbling)

  • 传播方向: 从最内层元素向上传播到外层元素
  • 触发顺序: 子元素父元素祖先元素document
  • 默认行为: 大多数事件默认采用冒泡机制
// 示例:事件冒泡
document.getElementById('parent').addEventListener('click', function() {console.log('父元素被点击');
});document.getElementById('child').addEventListener('click', function() {console.log('子元素被点击');
});
// 点击子元素时,会先输出"子元素被点击",再输出"父元素被点击"

事件捕获 (Event Capturing)

  • 传播方向: 从最外层元素向下传播到目标元素
  • 触发顺序: document祖先元素父元素目标元素
  • 启用方式: 在 addEventListener 中将 useCapture 参数设为 true
// 示例:事件捕获
document.getElementById('parent').addEventListener('click', function() {console.log('父元素被点击');
}, true); // true 表示在捕获阶段触发document.getElementById('child').addEventListener('click', function() {console.log('子元素被点击');
}, true);
// 点击子元素时,会先输出"父元素被点击",再输出"子元素被点击"

事件代理 (Event Delegation)

定义

事件代理是一种利用事件冒泡机制来管理多个子元素事件的技术,通过在父元素上绑定事件监听器来处理所有子元素的事件。

核心原理
  • 利用事件冒泡机制
  • 在祖先元素上统一处理子元素事件
  • 通过 event.target 确定实际触发事件的元素
优势
  • 性能优化: 减少事件监听器数量
  • 内存效率: 降低内存占用
  • 动态元素支持: 自动处理动态添加的元素
  • 维护简便: 集中管理事件处理逻辑
实现示例
javascript// 传统方式 - 为每个li元素绑定事件
const listItems = document.querySelectorAll('li');
listItems.forEach(item => {item.addEventListener('click', function() {console.log('点击了:', this.textContent);});
});// 事件代理方式 - 在父元素上统一处理
const list = document.querySelector('ul');
list.addEventListener('click', function(event) {// 通过 event.target 确定实际点击的元素if (event.target.tagName === 'LI') {console.log('点击了:', event.target.textContent);}
});
应用场景
  • 动态列表项的事件处理
  • 表格行或单元格事件处理
  • 大量相似元素的事件管理
  • 需要频繁添加/删除元素的场景

合成事件 (Synthetic Event)

  • 概念: React等框架封装的跨浏览器事件系统

  • 目的: 解决浏览器兼容性问题,提供统一的事件接口

  • 特性

    :

    • 兼容所有浏览器
    • 提供与原生事件相同的接口
    • 支持事件池优化性能
// React中的合成事件示例
function Button() {const handleClick = (syntheticEvent) => {// syntheticEvent是React的合成事件对象console.log(syntheticEvent.target);// 阻止事件传播syntheticEvent.stopPropagation();};return <button onClick={handleClick}>点击我</button>;
}

事件流阶段

  1. 捕获阶段: 事件从 document 向下传播到目标元素
  2. 目标阶段: 事件到达目标元素
  3. 冒泡阶段: 事件从目标元素向上传播到 document

事件控制方法

  • stopPropagation(): 阻止事件继续传播
  • stopImmediatePropagation(): 阻止事件传播并阻止同一元素上的其他事件监听器执行
  • preventDefault(): 阻止事件的默认行为
http://www.dtcms.com/a/453921.html

相关文章:

  • 中国空间站模型网络工程专业是干什么的
  • 大型网站都怎么做推广wap网站建设案例
  • Windows文件资源管理器快速查看文件夹内所有视频总时长
  • 聊城网站营销信息一般的网站都是用什么系统做的
  • 网站搭建传媒公司网站模板
  • 关于我的cifar-10的模型跑取
  • linux进程详解
  • 【无约束优化】多维搜索——梯度方法
  • AI作为操作系统已经不能阻挡了,尽管它还没来
  • 哪个网站建设公司贵阳网站建设公司排行
  • 建设银行官方网站企业网银苏州市工程造价信息网官网
  • API 类别 - 选择器
  • 网站建设商业阶段谷歌网站提交
  • VSCode下json文件自动排版的实现(VSCODE安装美化JSON插件)
  • 深圳做网站推广公司微信小程序商城需要多少钱
  • 在Vue项目中构建后端配置的动态路由及权限控制体系
  • 鄢陵县网站苏州商城网站制作
  • grep 命令使用手册详解
  • 青岛市黄岛区城市建设局网站网站关键词百度首页消失
  • 国外服装设计网站网销网站建设流程图
  • 牛客算法_堆栈
  • 2025-10-07打包时遇到Failed to execute script pyi rth tkinter问题
  • 磁共振成像原理(理论)21:K空间采样 (Sampling of k-Space) - k空间信号的采样要求
  • 浅谈 gRPC——以 Python 项目 secure_services_py 为例
  • 2025版基于springboot的美食食品商城系统
  • SpringBoot + PostgreSQL 密码认证失败 Windows 系统解决方案
  • 辽宁朝阳网站建设公司中国铁建门户登录
  • C# BLF 文件格式分析
  • C++基础:(八)STL简介
  • 深圳东门地铁站叫什么桂林出网站