【Javascript】Javascript高级程序设计:js 事件 随手笔记

news2025/2/27 3:00:43

目录

  • 一、事件概述
    • 1.1 html 与 js
    • 1.2 事件流
    • 1.3 DOM 事件流
  • 二、事件处理程序
    • 2.1 html 事件处理程序
    • 2.2 dom0 级事件处理程序
    • 2.3 dom2 级事件处理程序
    • 2.4 IE 事件处理程序
  • 三、事件对象
  • 四、事件类型
    • 4.1 概述
    • 4.2 UI 事件
    • 4.3 焦点事件
    • 4.4 鼠标与滚轮事件
    • 4.5 键盘与文本事件
    • 4.6 额外补充
  • 五、事件委托


一、事件概述

1.1 html 与 js

js 与 html 的交互是通过 事件 实现的

事件:文档或浏览器窗口中发生的特定交互瞬间。可以使用侦听器(或处理程序)预订事件,以便执行事件发生的相应代码

下面介绍与事件相关的核心概念

1.2 事件流

事件流:页面中接收事件的顺序。当点击 button 按钮时,也点击了 button 的容器元素,甚至点击了整个页面。

事件流分为:事件冒泡事件捕获
在这里插入图片描述
IE 的事件流为事件冒泡

下面,我们通过一个例子展示事件冒泡与事件捕获
事件冒泡

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Document</title>
    <style>
        div {
            width: 200px;
            height: 200px;
            background-color: pink;
        }
    </style>
</head>
<body>
    <div>
        <button>点击按钮</button>
    </div>

    <script>
        var div = document.querySelector("div");
        var btn = document.querySelector("button");

        document.addEventListener("click", function() {
            console.log("click document");
        })

        div.addEventListener("click", function() {
            console.log("click div");
        })

        btn.addEventListener("click", function() {
            console.log("click button");
        })
    </script>
</body>
</html>


当点击 button 时,冒泡事件按从最精确的目标到最不精确的目标触发,直到冒泡到 document 为止

事件捕获

// 只需要把addEventListener第三个参数改为 true 即可
        document.addEventListener("click", function() {
            console.log("click document");
        }, true);

        div.addEventListener("click", function() {
            console.log("click div");
        }, true);

        btn.addEventListener("click", function() {
            console.log("click button");
        }, true);

在这里插入图片描述

1.3 DOM 事件流

dom 事件规定的事件流包括三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。对应:捕获到事件、实际目标接收到事件、对事件做出响应

事件捕获和事件冒泡都会发生,捕获先发生,冒泡后发生

对于上面的代码所对应的各个阶段,对于 button 点击事件来说:

  1. 事件捕获:从点击 button,到 document、body、div。不到 button ,属于事件捕获阶段
  2. 目标阶段:button 接收到点击事件并处理事件
  3. 冒泡阶段:事件冒泡回 div、body、document 阶段

二、事件处理程序

2.1 html 事件处理程序

元素支持的每种事件,都可以使用一个与相应事件处理程序同名的 html 特性来指定

比如 点击事件 onclick

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>
</head>
<body>
   <button onclick='alert("button被点击");'>点击</button>
</body>
</html>

在这里插入图片描述

2.2 dom0 级事件处理程序

每个元素都有自己的事件处理程序属性。把这种属性值设置为一个函数,就可以指定事件处理程序

<head>
   <title>Document</title>
</head>
<body>
   <button>点击</button>
   <script>
       var btn = document.querySelector("button");
       btn.onclick = function() {
           alert("button 被点击");
       }
   </script>
</body>
</html>


也可以把属性值设置为 null,删除事件

2.3 dom2 级事件处理程序

dom2级事件处理程序 定义了两个方法:addEventListener()removeEventListener()

所有 dom 节点都包含了这两个方法。接收三个参数

  1. 事件名
  2. 处理程序
  3. 布尔值。为 true,捕获阶段调用,false,冒泡阶段调用(默认为false)

2.4 IE 事件处理程序

attachEvent
不介绍,感兴趣自行搜索


tips:
html 事件处理程序带 on
dom0 btn.onclick 带 on
dom2 addEventListener 不带 on


三、事件对象

上述事件处理程序,会传入一个参数 event

div.addEventListener("click", function(event) {
	...
}, false);

event 是一个事件对象,所有属性均为只读属性
function 函数中的 this,指向绑定事件的对象!!!!(好好体会)

event 属性说明
e.target返回触发事件的元素
e.type触发事件类型
e.clientX页面可视区(窗口)
e.pageX页面(含滚动)
e.screenX屏幕窗口
e.stopPropagation()阻止事件捕获或事件冒泡

以上 x 均可换为 y

e.stopPropagation()

<!DOCTYPE html>
<html lang="en">
<head>
   <title>Document</title>
   <style>
       div.a {
           width: 400px;
           height: 400px;
           background-color: pink;
       }
       div.b {
           width: 300px;
           height: 300px;
           background-color: green;
       }
       div.c {
           width: 200px;
           height: 200px;
           background-color: yellow;
       }
       div.d {
           width: 100px;
           height: 100px;
           background-color: blue;
       }
   </style>
</head>
<body>
   <div class="a">
       <div class="b">
           <div class="c">
               <div class="d">

               </div>
           </div>
       </div>
   </div>
   <script>
       var diva = document.querySelector("div.a");
       var divb = document.querySelector("div.b");
       var divc = document.querySelector("div.c");
       var divd = document.querySelector("div.d");

       diva.addEventListener("click", a);
      divb.addEventListener("click", b);
       divc.addEventListener("click", c);
       divd.addEventListener("click", d);

       function a() {
          console.log("a");
       }
       function b(e) {
           console.log("b");
           e.stopPropagation();
       }
       function c() {
           console.log("c");
       }
       function d() {
           console.log("d");
       }
   </script>
</body>
</html>

在这里插入图片描述


四、事件类型

4.1 概述

事件类型分为

  1. UI 事件
  2. 焦点事件
  3. 鼠标事件
  4. 滚轮事件
  5. 文本事件
  6. 键盘事件
  7. 变动事件(mutation):dom 结构变动时触发(不介绍)

4.2 UI 事件

UI 事件 指不一定与用户操作有关的事件。

事件名称说明
load当页面全部加载后在 window 上触发
error当发生 Javascript 错误时在 window 上触发
resize当窗口大小变化时在 window 上触发
scroll当用户滚动带滚动条的元素内容时,在该元素上触发

load
当页面完全加载后(包括图片、js 文件、css文件等外部资源)
window.onload = …
window.addEventListener(“load”, …)

4.3 焦点事件

当页面元素获得或失去焦点时触发 |

事件名称说明
blur元素失去焦点时触发,该事件不会冒泡
focus获得焦点,不会冒泡
focusin等于focus,会冒泡

4.4 鼠标与滚轮事件

事件名称说明
click点击事件
dbclick双击事件
mousedown鼠标按下任意键
mouseup鼠标按下后放开
mousemove鼠标在元素内称动,重复触发
mouseenter鼠标首次移入元素内部
mouseleave鼠标离开
mouseoutmouseleave,会冒泡
mouseovermouseenter,会冒泡

mouseout、mouseover在经过子元素时也会触发

事件名称说明
mousewheel鼠标滚轮事件

mousewheel 触发的 event,会有 wheelDelta
向上滚轮为正,向下为负

4.5 键盘与文本事件

事件名称说明
keydown按下,按住不放会重复触发
keypress按字符键才触发,keydown按所有键都触发
keyup释放按键

键码
发生 keydown 和 keyup 事件时,event 事件的 keyCode 属性会包含按下键的 ascii 码。

4.6 额外补充

html 事件:
DOMContentLoaded 在形成完整 dom 树后触发,可以添加到 document 或 window 上


五、事件委托

当“事件处理程序”太多时,可以通过事件委托减少绑定事件
事件委托 利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件

例如:给 ul 的 li 添加点击事件,可以不给 li 添加,而是给 ul 添加,再判断 event 是哪个点击对象

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

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

相关文章

Vue基本使用

上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><!-…

【PCIe 5.0 - 10】Memory, I/O, and Configuration Request 规则

下列规则适用于所有 Memory, I/O, Configuration Requests&#xff0c;以下是针对各类请求的附加规则。 除通用 header 字段外&#xff0c;所有 Memory, I/O, 和 Configuration Requests 还包括以下字段&#xff1a; Requester ID[15:0] 和 Tag[9:0]&#xff0c;组成 Transact…

Easy-Laser激光测平仪维修易激光对中仪E920

Easy-Laser激光对中仪常见故障&#xff1a;触摸屏损坏&#xff08;屏碎&#xff0c;不显示&#xff0c;黑屏&#xff0c;蓝屏&#xff0c;无背光等&#xff09;&#xff0c;对中仪电路板损坏&#xff0c;对中仪接收装置电路板&#xff0c;对中仪发射控制装置电路板等均可维修。…

筋膜炎能自愈吗

筋膜炎的临床表现&#xff1a; 在发病前&#xff0c;通常有过度劳累的历史&#xff0c;剧烈运动、创伤、寒冷和上呼吸道感染也可能导致这种疾病。肢体皮肤肿胀&#xff0c;或皮肤红斑和关节活动有限。侵犯部位以下的下肢&#xff0c;特别是小腿&#xff0c;其次是前臂。损伤的…

高效率、低待机功耗TUHS15F12、TUHS25F05、TUHS25F12、TUHS25F24、TUHS5F05小型板载AC/DC转换器

简介 TUHS AC-DC转换器具有高效率、低待机功耗以及内置过流和过压保护电路。这些小型板安装AC-DC转换器在保持时间和预期寿命方面具有设计灵活性。该系列具有3W至26.4W的额定输出和AC85至264V、DC120至370V的通用输入电压。工作温度范围为-40C至85C。 引脚配置 规格参数 1、…

数据结构(四)--队列及面试常考的算法

一、队列介绍 1、定义 与栈相似&#xff0c;队列是另一种顺序存储元素的线性数据结构。栈与队列的最大差别在于栈是LIFO&#xff08;后进先出&#xff09;&#xff0c;而队列是FIFO&#xff0c;即先进先出。 2、优缺点及使用场景 优点&#xff1a;先进先出&#xff08;FIFO&…

如何较为准确的测试自己的网速?

相对靠谱公正的20个测速网站(或APP或软件)大全&#xff08;不断更新中&#xff09; 一、电信宽带网页测速 网址&#xff1a;https://10000.gd.cn/#/speed 预览&#xff1a; 二、测速网 网址&#xff1a;测速网 - 专业测网速, 网速测试, 宽带提速, 游戏测速, 直播测速, 5G测…

Window下coturn服务器的搭建

Window下搭建coturn服务器&#xff1a; 准备材料&#xff1a; 1、安装Cygwin&#xff0c;地址&#xff1a;https://cygwin.com/install.html 由于Window无法直接部署coturn&#xff0c;因此需要下载安装Cygwin在Window上部署Linux虚拟环境。 在安装的时候需要安装几下packe…

Aigtek的ATA-7050高压放大器对比进口品牌TREK的609E-6

一、公司介绍 中国安泰&#xff1a;西安安泰电子科技有限公司是国内专业从事测量仪器研发生产和销售的高科技企业&#xff0c;公司依托西安交大、西北工业大学组建的科研团队&#xff0c;专注功率放大器、功率信号源等产品为核心的相关行业测试解决方案的研究&#xff0c;拥有国…

taro全局配置页面路由和tabBar页面跳转

有能力可以看官方文档&#xff1a;Taro 文档 页面路由配置&#xff0c;配置在app.config.ts里面的pages里&#xff1a; window用于设置小程序的状态栏、导航条、标题、窗口背景色&#xff0c;其配置项如下&#xff1a; tabBar配置&#xff1a;如果小程序是一个多 tab 应用&…

Node和Python遍历文件夹自动注入代码

需求是从文件夹中遍历检索多层级文件夹,找到其中文件取到上面namespace 后面的名称,在下面代码中自动注入动态代码: static displayName = "Test";下面使用node和python两种代码实现一下,方便对照学习 node代码 const fs = require(fs); const path = requir…

【算法|滑动窗口No.4】leetcode 485.最大连续 1 的个数 487.最大连续 1 的个数 II 1004. 最大连续1的个数 III

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

配置开启swap分区自定义大小

当前服务器swap分区是关闭状态&#xff0c;因服务需求需要开启swap分区 在 /data 目录下创建一个名为 swapfile 的文件&#xff0c;并将其大小设置为 8GB 注意这个操作占用的是/data目录的磁盘空间&#xff0c;要确保磁盘剩余空间大于设置的内存大小并且不影响磁盘空间的正常使…

10kb的WordPress外链页面安全跳转插件

老白博客我参照csdn和腾讯云的外链跳转页面&#xff0c;写了一个WordPress外链安全跳转插件&#xff1a;给网站所有第三方链接添加nofollow标签和重定向功能&#xff0c;提高网站安全性。插件包括两个样式&#xff0c;由于涉及到的css不太一样&#xff0c;所以分别写了两个版本…

测试从外包到自研再到大厂,这5年鬼知道我是怎么过来的

18岁那年我背井离乡来到从来没有来过的郑州。在一所普通的二本院校里学网络工程。 很明显&#xff0c;在大学以前只会用电脑开关机打LOL的我恍然间只觉得自己来到了人间天堂&#xff0c;没有人管&#xff0c;也没有任何烦恼无忧无虑的过了三年大学生涯。 直到秋招的开始&…

家政保洁团队服务预约小程序的效果如何

家政保洁可以是大公司也可以是小团队&#xff0c;但无论什么规格&#xff0c;其市场需求都是稳中有增&#xff0c;随着人们生活品质提升&#xff0c;其对居住环境/办公环境等都有一定要求&#xff0c;这意味着家政团队可以拓展同城乃至外地多个领域的生意。 但线下信息单一&am…

Python的web自动化学习(六)Selenium第一个网页操作

引言&#xff1a; 前面我们系统的介绍了一个各种selenium的工作原理、环境配置与准备、各种元素定位的方法&#xff0c;现在让我们一起来实践吧&#xff0c;以哔哩哔哩登录为例子说明&#xff1a; Selenium自动登录B站&#xff08;通过QQ登录&#xff09; 为什么使用qq登录&…

nodejs升级或降级

node有一个模块叫n&#xff0c;是专门用来管理node.js的版本。 升级或降级步骤 1 、安装n模块 npm install -g n 2、 升级node.js到最新稳定版 n stable Ps: n后面也可以跟随版本号&#xff08;用于升级或降级&#xff09;比如&#xff1a; n v16.12.0

白银期货投资指南,轻松搞定白银投资

在今天的金融市场中&#xff0c;白银已成为备受瞩目的投资选择。不仅如此&#xff0c;白银还是避险资产的首选之一&#xff0c;兼具保值和增值的潜力。万洲金业将为您提供一份白银期货投资指南&#xff0c;让您轻松了解白银投资&#xff0c;助力在白银交易市场获得潜在收益。 …

uniapp的启动页、开屏广告

uniapp的启动页、开屏广告 启动页配置广告开屏 启动页配置 在manifest.json文件中找到APP启动界面配置&#xff0c;可以看到有Android和iOS的启动页面的配置 &#xff0c;选择自定义启动图即可配置 广告开屏 在pages中新建一个广告开屏文件并在pases.json的最顶部配置这个页…