js-13-Js中的事件模型

news2024/9/21 14:42:09

事件模型分为:事件与事件流、原始事件模型、标准事件模型和IE事件模型
1、事件与事件流
js中的事件,可以理解为是在HTML中文档或者浏览器中发生的一种交互操作,使得网页具备互动性,常见的有加载事件、鼠标事件、自定义事件等。
由于DOM是一个树结构,如果在父子节点绑定事件时候,当触发子节点的时候,就存在一个顺序问题,这涉及到了事件流的概念。
事件流都会经历以下三个阶段:
事件捕获阶段(capture phase)
处于目标阶段(target phase)
事件冒泡排序(bubbling phase)
在这里插入图片描述
事件冒泡是从下到上的传播方式,由最具体的元素(触发节点),然后逐渐向上传播到最不具体的那个节点,也就是DOM最高层的父节点。
在这里插入图片描述
然后,给button和它的父元素,加入点击事件
在这里插入图片描述
输出如下:
在这里插入图片描述
点击事件首先在button元素上发生,然后逐渐向上传播
事件捕获与事件冒泡相反,事件最开始由不太具体的节点最早接受的事件,而最具体的节点(触发节点)最后接受事件。
2、事件模型
事件模型可以分为以下三种:
原始事件模型(DOM0级)
标准事件模型(DOM2级)
IE事件模型(基本不用)

2.1原始事件模型
事件绑定监听函数函数比较简单,分为两种方式:
HTML中的直接绑定

在这里插入图片描述
通过js绑定
在这里插入图片描述
2.1.1.特性
绑定速度快
DOM0级事件具有很好的跨浏览器优势,会以最快的速度绑定,但由于绑定速度太快,可能页面还未完全加载出来,以至于事件可能无法正常运行。
只支持冒泡,不支持捕获
同一个类型的事件只能绑定一次
在这里插入图片描述
如上,当希望同一个元素绑定多个同类型事件的时候(上面的这个btn元素绑定2个点击事件),是不被允许的,后绑定的事件会覆盖之前的事件。
删除DOM0级事件处理程序只要将对应事件属性置为null即可。
![在这里插入图片描述](https://img-blog.csdnimg.cn/d566caa0377449eca8110c08a85a1b9e.png在这里插入图片描述
2.2.标准事件模型
在该事件模型中,一次事件共有三个过程:
事件捕获阶段:事件从document一直向下传播到目标元素,依次检查经过的节点是否绑定了事件监听函数,如果有则执行。
事件处理阶段:事件到达目标元素,触发目标元素的监听函数。
事件冒泡阶段:事件从目标元素冒泡到document,依次检查经过的节点是否绑带了事件监听函数,如果有则执行。

事件绑定监听函数的方式如下:
在这里插入图片描述

事件移除监听函数的方式如下:
在这里插入图片描述
参数如下:
eventType指定事件类型(不要加on)
handler是事件处理函数
useCapture:是一个boolean用于指定是否在捕获阶段进行处理,一般设置为false与IE浏览器保持一致

举例:
在这里插入图片描述
2.2.1特性
可以在一个DOM元素上绑定多个事件处理器,各自并不会冲突
在这里插入图片描述
执行时机:
当第三个参数(useCapture)设置为True就在捕获过程中执行,反之在冒泡过程中执行处理函数
举例:
在这里插入图片描述
设置点击事件
在这里插入图片描述
上述代码使用了enentPhase,返回一个代表当前执行阶段的整数值,1为捕获阶段,2为事件对象触发阶段,3为冒泡阶段
点击Click Me!,输出如下:
在这里插入图片描述
可以看到,p和div都是在冒泡阶段,响应了事件,由于冒泡的特性,裹在里层的p率先做出响应,如果把第三个参数都改为true
在这里插入图片描述
输出如下:
在这里插入图片描述
两者都是在捕获阶段响应事件,所以div比p标签先响应。

2.3.IE事件模型
IE事件模型共有两个过程:
事件处理过程:事件达到目标元素,触发目标元素的监听函数
事件冒泡阶段:事件从目标元素冒泡到document,依次检查经过的节点是否绑定了事件监听函数,如果有则执行
事件绑定监听函数的方式如下:
在这里插入图片描述
事件移除监听函数的方式如下:
在这里插入图片描述
举个例子:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/988246.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CocosCreator3.8研究笔记(十)CocosCreator 图像资源的理解

一、图像资源导入 Cocos Creator 可使用图像文件格式,支持 JPG、PNG、BMP、TGA、HDR、WEBBP、PSD、TIFF 等。 将图像资源直接拖拽到 资源管理器 即可将其导入 二、图像资源的类型 在 属性检查器 面板中便可根据需要设置图像资源的使用类型:raw 、 textu…

window和linux下载ffmpeg

window 进入官方 进入 download 页面并选择 window 版本 下载 zip 压缩包 解压压缩包 解压压缩包之后,在 bin 目录下有三个文件,我们要下载的 window 版 ffmpeg.exe 就在其中,后续你可以添加系统环境变量或者在每次执行 ffmpeg.exe 都带上路…

leetcode386. 字典序排数(java)

字典序排数 题目描述递归法迭代 题目描述 难度 - 中等 leetcode386. 字典序排数 给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。 示例 1: 输入:n 13 输出&#xff1a…

学习Jetpack Compose的反思,总结及新的开始(无干货,纯叙事)

前言及个人简介 我是一名90后安卓开发者,我是从去年五月四日开始学习 Jetpack Compose的,出于对前沿安卓知识的渴望,我点开了Jetpack Compose官网的网页,开始了我的学习之旅,那时候国内的相关文档还没有现在多&#x…

小程序中使用分包

前言 小程序在未使用的分包的情况下仅支持大小为2M,如果图片等资源过多的情况下可以使用分包功能,使用分包的情况下单个分包大小不能超过2M,总大小不能超过20M,分包有两种情况:普通分包和独立分包,下面介绍的是普通分包。官方文档…

Linux常用命令——cp命令

在线Linux命令查询工具 cp 将源文件或目录复制到目标文件或目录中 补充说明 cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一…

大佬带飞,代码分享不会用?玩转Git,跟上大佬节奏!

一、安装 Git 客户端 这里为大家提供了windows版的Git客户端以及安装图文详解文档。百度网盘: https://pan.baidu.com/s/1CDu0Ke199pt3Ysv-QtWObA 提取码:8888 如果过期了请留言联系我。 二、注册码云账号 打开码云网站:https://gitee.co…

分布式 - 服务器Nginx:基础系列之Nginx静态资源配置优化sendfile | tcp_nopush | tcp_nodelay

文章目录 1. sendfile 指令2. tcp_nopush 指令3. tcp_nodelay 指令 1. sendfile 指令 请求静态资源的过程:客户端通过网络接口向服务端发送请求,操作系统将这些客户端的请求传递给服务器端应用程序,服务器端应用程序会处理这些请求&#xff…

ARM+Codesys标准通用型控制器

整机工业级设计,通讯外设经过隔离保护 电源宽电压设计(9~36V DC ) 丰富的通讯接口,满足多种场合控制和通讯需求 四核工业级处理器,高性能,低功耗,高可靠性 机身无风扇设计,外壳小巧 搭载内核 100% 自主…

【面试高频题】二叉树“神级遍历“入门

题目描述 这是 LeetCode 上的 「99. 恢复二叉搜索树」 ,难度为 「中等」。 Tag : 「二叉树」、「树的搜索」、「递归」、「迭代」、「中序遍历」、「Morris 遍历」 给你二叉搜索树的根节点 root,该树中的 恰好 两个节点的值被错误地交换。请在不改变其结…

HBuilderX安装+配置教程

HbuilderX是Hbuilder的升级版。它是是DCloud(数字天堂)推出为前端开发者服务的通用IDE,或者称为编辑器。 目录 一 下载 二 安装 三 创建桌面快捷方式 四 使用 1.【新建项目】: 2 运行 一 下载 官网:DCloud - …

JavaScript的面向对象

一、认识对象 1.概述 对象(object)是 JavaScript 语言的核心概念,也是最重要的数据类型。 什么是对象?简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合…

vscode调试程序设置

主要设置和json内容如下: cpp_properties.json内容: {"configurations": [ //C intellisense插件需要这个文件,主要是用于函数变量等符号的只能解析{"name": "Win32","includePath": ["${work…

Discourse 如何访问运行数据库

在需要了解 Discourse 如何访问数据库之前我们需要了解的是 Discourse 的所有软件都使用的是 Docker 容器。 因此我们必须要进入到 Docker 容器后才能访问 Discourse 内部的东西。 进入 Discourse 容器 进入 Discourse 容器的命令是 cd /var/discourse/ ./launcher enter a…

Container容器

Container继承体系 Winow是可以独立存在的顶级窗口,默认使用BorderLayout管理其内部组件布局;Panel可以容纳其他组件,但不能独立存在,它必须内嵌其他容器中使用,默认使用FlowLayout管理其内部组件布局;ScrollPane 是 一个带滚动条…

WMS仓储管理系统如何加强印刷企业仓库管理

在当今的数字化时代,仓库管理系统的智能化和信息化已经成为企业运营效率的重要支柱。印刷企业WMS仓储管理系统,作为一种先进的管理工具,正在被越来越多的印刷企业所采用,以加强他们的仓库管理工作。 一、WMS仓储管理系统概述 WMS…

Always On 数据库无法自动同步的问题

问题: 在给客户的SQL Server 2019 配置好Always On 之后,不久就出现高可用组里的一个库无法正常同步。 第一次出现,以为是偶发性问题,直接右键点击恢复数据同步,没一会就同步好了;过了一个月问题又出现了…

git 远程多分支,本地如何切换分支

1、git clone url 先clone 项目,git branch -a 查看所有分支,发现有多个远程分支 2、假如想在 remote 分支工作,但是本地还没有 remote 分支,可以先输入命令: git checkout ,不要按回车键,按…

民安智库(专业市场调查公司)教师节:国内老师教学压力大

2023年9月10日是我国第39个教师节,今年教师节主题是“躬耕教坛,强国有我”。目前我国教师队伍规模世界第一,建成了世界最大规模的教育体系,《中国教师教育发展报告2022》指出我国教师教育仍然面临提高生源质量、提升教师教育效能、…

一键安装Mysql、Redis、Nginx脚本

目录 一键安装Mysql脚本 一键安装Redis脚本 一键安装Nginx脚本 目的是方便用户快速安装Mysql、Redis、Nginx这三个软件,其中有部分配置可以自行舍取,脚本经供参考,实际工作可按需求调整。 一键安装Mysql脚本 [rootlocalhost ~]# cat one…