【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 是哪个点击对象

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

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

相关文章

蓝桥杯(C++ 扫雷)

题目&#xff1a; 思想&#xff1a; 1、遍历每个点是否有地雷&#xff0c;有地雷则直接返回为9&#xff0c;无地雷则遍历该点的周围八个点&#xff0c;计数一共有多少个地雷&#xff0c;则返回该数。 代码&#xff1a; #include<iostream> using namespace std; int g[…

Cordova插件开发二:高精度定位之卫星数据解析

文章目录 1.最终效果预览2.坐标获取方法3.在公共类中封装获取坐标的通用方法4.插件js中封装startGeoLocation方法5.插件主界面封装的方法1.最终效果预览 2.坐标获取方法 let obj = Object.assign({}, this.mapConfig.mapLocationObj)obj.isKeepCallBack = falselet res = await…

HTML标题、段落、文本格式化

HTML标题&#xff1a; 在HTML文档中&#xff0c;标题是很重要的。标题是通过<h1> - <h6标签进行定义的&#xff0c;<h1> 定义最大的标题&#xff1b;<h6>定义最小的标题。 <hr> 标签在HTML页面中用于创建水平线&#xff0c;hr元素可用于分隔内容。…

基于51单片机篮球计时器计分器设计(源码+原理图+PCB+仿真+设计报告+讲解视频)

# 基于51单片机篮球计分器proteus仿真 51单片机篮球计分器proteus仿真&#xff08;源码原理图PCB仿真设计报告讲解视频&#xff09; 仿真&#xff1a;proteus 7.8 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 编号C0004 51单片机篮球计分器 讲解视频1…

Pytorch 注意力机制解析与代码实现

什么是注意力机制 注意力机制是深度学习常用的一个小技巧&#xff0c;它有多种多样的实现形式&#xff0c;尽管实现方式多样&#xff0c;但是每一种注意力机制的实现的核心都是类似的&#xff0c;就是注意力。 注意力机制的核心重点就是让网络关注到它更需要关注的地方。 当…

合肥中科深谷嵌入式项目实战——人工智能与机械臂(五)

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 作者&#xff1a;爱吃饼干的小白鼠。Python领域优质创作者&#xff0c;2022年度博客新星top100入围&#xff0c;荣获多家平台专家称号。…

【AI视野·今日Robot 机器人论文速览 第六十一期】Tue, 24 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Tue, 24 Oct 2023 Totally 50 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Robot Fine-Tuning Made Easy: Pre-Training Rewards and Policies for Autonomous Real-World Reinforcement Learning Autho…

解决找不到msvcr120.dll无法继续执行问题的5个方法,快速解决dll问题

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是找不到msvcr120.dll的错误。这个错误通常发生在运行某些程序或游戏时&#xff0c;它会导致程序无法正常启动或运行。那么&#xff0c;如何解决找不到msvcr120.dll的问题呢&#xff1f;下面我…

【Linux】Linux+Nginx部署项目(负载均衡动静分离)

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Linux的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.Nginx负载均衡 1.什么是负载均衡 2.实…

模型实际训练笔记2-VGG

1、VGG简介&#xff1a; VGG网络是由牛津大学的视觉几何组&#xff08;visual geometry group&#xff09;首次提出来的。 VGG 网络&#xff0c;也称为Visual Geometry Group网络&#xff0c;是计算机视觉领域的一个深度卷积神经网络架构。它于2014年由牛津大学的研究团队开发…

C++ Qt 学习(二):常用控件使用与界面布局

1. Qt 布局详解 ui 设计器设计界面很方便&#xff0c;为什么还要手写代码&#xff1f; 更好的控制布局更好的设置 qss代码复用 完全不会写 Qt 布局&#xff0c;很麻烦&#xff0c;怎么学会手写布局&#xff1f; 看 Qt 自己怎么写改良 Qt 的布局写法 1.1 水平布局 #include …

【ES专题】ElasticSearch快速入门

目录 前言从一个【搜索】说起 阅读对象阅读导航笔记正文一、全文检索1.1 什么是【全文检索】1.2 【全文检索】原理1.3 什么是倒排索引 二、ElasticSearch简介2.1 ElasticSearch介绍2.2 ElasticSearch应用场景2.3 数据库横向对比 三、ElasticSearch环境搭建3.1 Windows下安装3.2…