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

目录

  • 一、事件概述
    • 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 是哪个点击对象

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

食堂系统登录报错

因为数据库没有任何用户数据&#xff0c;所以会报错&#xff0c;需要添加admin用户 D:\env\jdk1.8.0_341\bin\java.exe -XX:TieredStopAtLevel1 -noverify -Dspring.output.ansi.enabledalways -Dcom.sun.management.jmxremote -Dspring.jmx.enabledtrue -Dspring.liveBeansVie…

照片如何打包?三个方法轻松搞定!

照片打包是一种有效的管理方式&#xff0c;可以提高工作效率、保护照片安全、节省存储空间等。那么如何简单快速地打包照片呢&#xff1f;下面介绍了三种方法~ 方法一&#xff1a;使用嗨格式压缩大师 1、在电脑上打开【嗨格式压缩大师】&#xff0c;点击软件首界面的【图片压缩…

我的ChatGPT的几个使用场景

示例一&#xff0c;工作辅助、写函数代码&#xff1a; 这里展示了一个完整的代码&#xff0c;修正&#xff0c;然后最终输出的过程。GPT具备足够丰富的相关的小型代码生成能力&#xff0c;语法能力也足够好。这类应用场景&#xff0c;在我的GPT使用中&#xff0c;能占到65%以上…

docker 存储目录迁移

参考&#xff1a;【Docker专题】WSL镜像包盘符迁移详细笔记 - 掘金 docker迁移 一 默认目录 Windows版本&#xff08;Windows 10 wsl 2&#xff09;docker 默认程序安装到c盘&#xff0c;数据存放于 C:\Users\当前用户名\AppData\Local\Docker\wsl\data\ext4.vhdx 这样会导致…

从开发者的角度看K8S中的复合容器模式

就应用设计最佳实践和原则而言&#xff0c;构建复杂的基于容器的架构与编程没有太大区别。本文的目标是使用众所周知的编程原理从开发人员的角度展示三种流行的可扩展性架构模式。 让我们从单一职责原则开始。根据 R. Martin 的说法&#xff0c;“一个类应该只有一个改变的理由…

软考高级之系统架构师系列之操作系统基础

概念 接口 操作系统为用户提供两类接口&#xff1a;操作一级的接口和程序控制一级的接口。操作一级的接口包括操作控制命令、菜单命令等&#xff1b;程序控制一级的接口包括系统调用。 UMA和NUMA UMA&#xff0c;统一内存访问&#xff0c;Uniform Memory Access&#xff0c…

大型企业如何通过低代码平台提高开发效率和降低成本?

云计算、大数据、人工智能、物联网风口之下&#xff0c;企业数字化转型如同被按下了快进键。为快速攻破转型路上的技术关&#xff0c;企业纷纷把目光投向了低代码开发平台&#xff0c;希望可以用最短的时间&#xff0c;开发出最适合企业发展的应用。 集团企业需要什么样的数字化…

NeRF-SLAM部署运行(3060Ti)

记录在部署运行期间遇到的一些问题&#xff0c;分享给大家~ 一、环境 RTX 3060 Ti、8G显存&#xff08;其实是不够用&#xff0c;只能简单跑跑demo&#xff09;、Ubuntu18.04 二、部署 1. 下载代码 git clone https://github.com/jrpowers/NeRF-SLAM.git --recurse-submod…

解决恶意IP地址攻击:保卫网络安全的有效方法

随着互联网的发展&#xff0c;网络安全威胁变得日益复杂&#xff0c;其中包括恶意IP地址攻击。这些攻击通常是网络犯罪分子的手段之一&#xff0c;用于入侵系统、窃取数据或进行其他恶意活动。本文将探讨如何解决恶意IP地址攻击&#xff0c;以保护网络安全。 恶意IP地址攻击是…

与云栖的浪漫邂逅:记一段寻找云端之美的旅程

云端之旅 2023 年的云栖大会如约而至&#xff0c;这次云栖大会也是阿里新任掌门蔡老板当任阿里巴巴董事局主席以来的第一次。大会与以往有很多不一样的地方&#xff0c;其中 AIGC 更是本届大会的重点议题&#xff01;你会感叹&#xff0c;阿里还是猛啊&#xff01; 我逛了下展…

Web Woeker和Shared Worker的使用以及案例

文章目录 1、前言2、介绍 Web Worker3、使用须知及兼容性3.1、使用须知3.2、兼容性 4、使用 Web Worker4.1、创建 Web Worker4.2、与主线程通信4.3、终止 Web Worker4.4、监听错误信息 5、使用 Shared Worker4.5、调试 Shared Worker 6、使用中的一些坑6.1、Web Woeker 中引入了…

8种按钮设计的常见类型分享

按钮是UI界面的元素之一&#xff0c;可以本能地吸引游客并将其转化为买家。界面中的UI按钮类型包括&#xff1a;CTA按钮、幽灵按钮、下拉按钮、浮动操作按钮、汉堡包按钮、加号按钮、消耗品按钮、共享按钮。 号召性用语按钮 CTA&#xff08;呼叫语言&#xff09;按钮是一种交…

被这7款在线涂鸦画板惊艳到,手残也能画出涂鸦大片!

作为一名涂鸦爱好者或者手帐达人&#xff0c;你是否在寻找好用的在线涂鸦画板软件呢&#xff1f;涂鸦画板软件释放了创造性的无限可能&#xff0c;让你能够将想法转化为令人惊叹的视觉效果&#xff0c;并轻松地与客户、同行和全球观众分享你的作品。 在这篇文章中&#xff0c;…

如何将微信视频号的视频保存到手机相册?

微信视频号是近年来微信推出的一项功能&#xff0c;它允许用户通过手机拍摄和分享短视频内容。然而&#xff0c;许多人纷纷表示他们想要保存微信视频号上的视频&#xff0c;以便在离线时观看。但一直以来这个需求腾讯一直没有开放随后也取消了复制视频链接功能&#xff0c;为此…

审核 Microsoft SQL Server 日志

手动审核数据库活动是一项艰巨的任务&#xff0c;有效完成审计的最佳方法是使用简化和自动化数据库监控的综合解决方案&#xff0c;该解决方案还应使数据库管理员能够监控、跟踪和即时识别任何操作问题的根本原因&#xff0c;并实时检测对机密数据的未经授权的访问。 什么是 S…

NI USB9218国产对标51.2 kS/s/ch,2通道C系列通用模拟输入模块

51.2 kS/s/ch&#xff0c;2通道C系列通用模拟输入模块 NI‑9218专为多用途测量而设计。 它使用针对特定测量的适配器提供了对加速度计、供电传感器、全桥和电压测量以及四分之一桥、半桥、60V和电流测量的内置支持。 每个通道可单独选择&#xff0c;因而用户可在各个通道上进行…

可靠的互联网兼职平台,平常可以做副业充实生活

在互联网时代&#xff0c;越来越多的人开始通过网络来寻找兼职副业的机会&#xff0c;能够更灵活地安排自己的时间&#xff0c;实现自己的收入增值。那么找到一个正规可靠的线上兼职平台就是一个比较重要的事情&#xff0c;这里分享几个正规靠谱的线上兼职副业平台&#xff0c;…

YOLOv7优化:独家创新(Partial_C_Detect)检测头结构创新,实现涨点 | 检测头新颖创新系列

💡💡💡本文独家改进:独家创新(Partial_C_Detect)检测头结构创新,适合科研创新度十足,强烈推荐 SC_C_Detect | 亲测在多个数据集能够实现大幅涨点 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.cn/tYI0c ✨✨✨前沿最新计算机顶会复现 🚀🚀🚀YOLO…

基于深度学习的人脸性别年龄识别 - 图像识别 opencv 计算机竞赛

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 毕业设计…

自适应H5樱花个人网站引导页导航源码SEO增强版

懂前端和 PHP 技术想更改前端页面的可以看&#xff1a;网站的前端页面不好看&#xff0c;你可以查看 index 目录&#xff0c;内有参数 txt 文本里面记录了前端页面所使的关键 JS 代码和 php 代码&#xff0c;只需要稍加复制粘贴修改到新的前端页面就可以了&#xff01;主目录的…