第十一讲_JavaScript文档对象模型DOM(二)

JavaScript文档对象模型DOM(二)

  • 1. 事件是什么
  • 2. 事件类型
  • 3. 添加和移除事件处理器
  • 4. 事件对象
    • 4.1 事件对象的常用属性
  • 5. 事件流
    • 5.1 阻止默认行为
    • 5.2 事件冒泡

1. 事件是什么

事件是发生在编程的系统中的事情,当事件发生时,系统产生某种信号,并提供一种机制,可以自动采取某种行动(即运行一些代码)。

为了对一个事件做出反应,需要添加一个事件处理器。这是一个代码块,在事件发生时运行。当这样一个代码块被定义为响应一个事件而运行时,称为注册一个事件处理器。(事件处理器也被叫做事件监听器)

2. 事件类型

  • 鼠标事件:

    • click:鼠标点击事件
    • mouseenter:鼠标进入事件
    • mouseleave:鼠标移出事件
  • 焦点事件:

    • focus:获得焦点事件
    • blur:失去焦点事件
  • 键盘事件

    • keydown:键按下事件
    • keyup:键松开事件
  • 输入事件

    • input:输入事件
  • 页面加载事件:

    • load:页面加载事件
  • 页面滚动事件:

    • scroll:页面滚动事件
  • 页面尺寸事件:

    • resize:页面尺寸事件

3. 添加和移除事件处理器

  • addEventListener():添加事件处理器
  • removeEventListener():移除事件处理器
<html><style>.parent {height: 100px;width: 100px;background-color: red;}</style><div class="parent"></div><script>const div = document.querySelector('div');// 添加点击事件div.addEventListener("click", () => {alert("hello")});</script></html>
<html><style>.parent {height: 100px;width: 100px;background-color: red;}</style><div class="parent"></div><script>function clickHandle() {alert("hello")}const div = document.querySelector('div');// 添加点击事件div.addEventListener("click", clickHandle);// 移除点击事件div.removeEventListener("click", clickHandle);</script></html>

4. 事件对象

在事件处理函数内部,系统会自动传入一个事件对象参数,以提供额外的功能和信息。例如:下面代码中,clickHandle处理器函数的event参数就是事件对象

<html><style>.parent {height: 100px;width: 100px;background-color: red;}</style><div class="parent"></div><script>// event 就是事件对象function clickHandle(event) {alert("hello")}const div = document.querySelector('div');// 添加点击事件div.addEventListener("click", clickHandle);</script></html>

4.1 事件对象的常用属性

  • type:事件的类型
  • clientX/ClientY:获取光标相对于浏览器可见窗口的位置
  • offsetX/offsetY:获取光标相对于 DOM 元素的位置
  • key:键盘按下的键
  • target:触发的元素

5. 事件流

事件流指的是事件完整执行过程中的流动路径。

事件流的三个阶段:

  1. 捕获阶段:事件流的第一个阶段,从根节点开始向下传播到目标元素。 可以使用 addEventListener 的第三个参数指定事件处理程序在捕获阶段中执行。
  2. 目标阶段:事件流的第二个阶段,事件到达目标元素后被触发执行事件处理程序。
  3. 冒泡阶段:事件流的最后一个阶段,事件从目标元素开始向上冒泡,依次经过每个父元素,直到达到根节点。可以使用 addEventListener 的第三个参数设置为 false 或省略来指定事件处理程序在冒泡阶段中执行。

5.1 阻止默认行为

有时会遇到一些情况,希望事件不执行它的默认行为。可以通过preventDefault()方法阻止元素的默认行为。

<html><a href="http://www.baidu.com">百度</a><script>const a = document.querySelector('a');// 添加点击事件a.addEventListener("click", (event) => {// 阻止默认行为event.preventDefault();});</script></html>

5.2 事件冒泡

事件冒泡描述了浏览器处理嵌套元素事件的方式,从嵌套最深处往外冒。

例如:下面代码示例,当你点击grandson区域时,依次弹出grandsonchildparent的警告框;当你点击child区域时,依次弹出childparent的警告框;当你点击parent区域,只弹出parent的警告框。

<html><style>.parent {height: 500px;width: 500px;background-color: red;}.child {height: 200px;width: 200px;background-color: blue;}.grandson {height: 100px;width: 100px;background-color: aqua;}</style><div class="parent"><div class="child"><div class="grandson"></div></div></div><script>const parent = document.querySelector('.parent');const child = document.querySelector('.child');const grandson = document.querySelector('.grandson');// 添加点击事件parent.addEventListener("click", (event) => {alert('我是parent')});child.addEventListener("click", (event) => {alert('我是child')});grandson.addEventListener("click", (event) => {alert('我是grandson')});</script></html>

有时候,我们不想点击grandson区域时,弹出childparent的警告框。这时我们可以用stopPropagation()阻断事件的流动传播。

    <html><style>.parent {height: 500px;width: 500px;background-color: red;}.child {height: 200px;width: 200px;background-color: blue;}.grandson {height: 100px;width: 100px;background-color: aqua;}</style><div class="parent"><div class="child"><div class="grandson"></div></div></div><script>const parent = document.querySelector('.parent');const child = document.querySelector('.child');const grandson = document.querySelector('.grandson');parent.addEventListener("click", (event) => {alert('我是parent')});child.addEventListener("click", (event) => {alert('我是child')});grandson.addEventListener("click", (event) => {alert('我是grandson')// 阻断事件的流动传播event.stopPropagation();});</script></html>

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

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

相关文章

【.net】缓存操作

类&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using System.Web.Caching;namespace RisunFactoryLibrary {public class CacheHelper{/// <summary>/// 创建缓存项的文件依赖/// </sum…

线程同步解析

一 线程同步 1 同步的意义 现实中抢票可能没票了还在抢票&#xff0c;然后线程就会一直在加锁解锁&#xff0c;就会导致其它线程抢不到锁而产生饥饿问题&#xff0c;我们前面也提过usleep就是让线程被切换&#xff0c;能让其它线程去申请锁&#xff0c;这种方式并不好&#xf…

蓝桥杯备战——13.PCF8591芯片的使用

目录 1.芯片简介2.读写时序3.控制字4.代码封装库5.原理图分析6.使用示例 1.芯片简介 截取自NXP的PCF8591芯片数据手册&#xff0c;我把重点关注部分划出来了&#xff0c;请务必自行阅读一遍数据手册&#xff01; 2.读写时序 ①器件地址&#xff1a; Bit0决定是读还是写操作&…

最新GPT4.0使用教程,AI绘画,GPT语音对话使用,DALL-E3文生图

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…

优质成长:新生儿补充维生素B6的关键注意事项

引言&#xff1a; 维生素B6&#xff0c;作为B族维生素的一员&#xff0c;对于新生儿的神经系统发育和代谢功能至关重要。本文将深入探讨维生素B6的作用、新生儿补充的必要性&#xff0c;以及在补充维生素B6时应该注意的事项&#xff0c;为父母提供科学、全面的育儿指南。 第一…

WebChat——一个开源的聊天应用

Web Chat 是开源的聊天系统&#xff0c;支持一键免费部署私人Chat网页的应用程序。 目录树 TOC &#x1f44b;&#x1f3fb; 开始使用 & 交流&#x1f6f3; 开箱即用 A 使用 Docker 部署B 使用 Docker-compose 部署C 使用 Jar包 本地部署 ⌨️ 本地开发&#x1f91d; 参与…

开源浏览器Firefox:使用Docker本地部署并远程访问进行测试

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 部署Firefox二. 本地访问Firefox三. Linux安装Cpolar四. 配置Firefox公网地址…

网络原理-TCP/IP(5)

TCP协议 延迟应答 它也是基于滑动窗口,提高效率的一种机制,结合滑动窗口以及流量控制,能够以延迟应答ACK的方式,把反馈的窗口,搞大.核心在于允许范围内,让窗口尽可能大. 如果接收数据的主机立刻返回ACK应答,这时候返回的窗口可能比较小. 1.假设接收端缓冲区为1M.一次收到了5…

树状数组相关

前置细节 &#xff0c;得到转二进制后&#xff0c;从右往左数第一个1与之前所有的0构成数树状数组最终形成如上图结构维护的是的信息&#xff0c;如即到上层&#xff0c;包含当前区间的大区间&#xff0c;如即到同一层的前一个&#xff0c;与当前区间无关的另一同等大小的区间…

第十二讲_JavaScript浏览器对象模型BOM

JavaScript浏览器对象模型BOM 1. 浏览器对象模型介绍2. location2.1 常用的属性2.2 常用的方法 3. navigator3.1 常用的属性 4. history4.1 常用的方法&#xff1a; 5. 本地存储 1. 浏览器对象模型介绍 BOM(Browser Object Model) 是指浏览器对象模型&#xff0c;浏览器对象模…

Git--07--GitExtension

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、GitExtension下载GitExtension官网下载教程 二、GitExtension安装三、GitExtension配置四、GitExtension使用 一、GitExtension下载 官网下载&#xff1a; http…

Hive 主要内容一览

Hive架构 用户接口&#xff1a;Client CLI&#xff08;command-line interface&#xff09;、JDBC/ODBC(jdbc访问hive) 元数据&#xff1a;Metastore 元数据包括&#xff1a;表名、表所属的数据库&#xff08;默认是default&#xff09;、表的拥有者、列/分区字段、表的类型&am…

Unity中的GUI

GUI&#xff1a;游戏用户交互界面&#xff0c;一个代码驱动的UI系统 GUI的主要作用 1、作为程序员的调试工具 2、为脚本组件创建自定义监视面板 3、创建新的编辑器窗口和工具以拓展Unity本身(一般作为内置游戏工具) GUI工作原理 1、OnGUI是每帧执行&#xff0c;相当于专门绘…

Mybatis基础教程及使用细节

本篇主要对Mybatis基础使用进行总结&#xff0c;包括Mybatis的基础操作&#xff0c;使用注解进行增删改查的练习&#xff1b;详细介绍xml映射文件配置过程并且使用xml映射文件进行动态sql语句进行条件查询&#xff1b;为了简化java开发提高效率&#xff0c;介绍一下依赖&#x…

【chisel】 环境,资料

Chisel环境搭建教程&#xff08;Ubuntu&#xff09; 根据上边的link去安装&#xff1b; 目前scala最高版本用scala-2.13.10,太高了 没有chisel的库文件支持&#xff1b;会在sbt下载的过程中报错&#xff1b; [error] sbt.librarymanagement.ResolveException: chisel chisel目…

爬虫学习笔记-scrapy安装及第一个项目创建问题及解决措施

1.安装scrapy pycharm终端运行 pip install scrapy -i https://pypi.douban.com/simple 2.终端运行scrapy startproject scrapy_baidu,创建项目 问题1:lxml版本低导致无法找到 解决措施:更新或者重新安装lxml 3.项目创建成功 4.终端cd到项目的spiders文件夹下,cd scra…

C语言实现网络爬虫

我常使用C语言写网络爬虫&#xff0c;能够将网页爬出来&#xff0c;但是&#xff0c;图片却爬不出来&#xff0c;有没有大佬帮解决一下&#xff01;&#xff01;&#xff01; 代码&#xff1a; #include <stdio.h> #include<string.h> #include<WinSock2.h>…

【大厂AI课学习笔记】1.4 算法的进步(5)关于GPU

——关于GPU GPU&#xff0c;即图形处理器&#xff0c;最初是为了加速计算机图形处理而设计的。然而&#xff0c;随着时间的推移&#xff0c;研究人员发现GPU的并行处理能力非常适合执行深度学习中的大规模矩阵运算。这一点在吴恩达教授的论文中得到了充分体现&#xff0c;他利…

Vue中间件的讲解案例分析

Vue中间件的讲解案例分析 1. Axios中间件&#xff1a; Axios是一个常用的HTTP客户端&#xff0c;可以与Vue结合使用&#xff0c;处理网络请求和数据获取。您可以创建一个Axios实例&#xff0c;并将其作为Vue的原型属性或插件使用&#xff0c;以便在整个应用程序中共享和使用。…

国标GB/T 28181详解:设备视音频文件检索消息流程

目 录 一、设备视音频文件检索 二、设备视音频文件检索的基本要求 三、命令流程 1、流程图 2、流程描述 四、协议接口 五、产品说明 六、设备视音频文件检索的作用 七、参考 在国标GBT28181中&#xff0c;定义了设备视音频文件检索消息的流程&#xff0c;主…