JavaScript事件对象

华子目录

  • 事件对象
    • `js`事件驱动机制
  • 三种事件模型
    • 1.标签绑定
    • 2.`DOM0`事件模型
    • 3.`DOM2`事件模型
      • 捕获流与冒泡流
      • `removeEventListener`事件移除
  • 事件类型
    • 鼠标事件`mouse event`
    • 键盘事件`keyboard event`
    • 多媒体事件`media event`
    • 表单事件`form event`
    • 窗口事件`window event`
    • 其他事件
  • 事件对象
  • 切换图片小案例

事件对象

  • JavaScript是采用事件驱动(event-driven)式编程的,通过事件驱动响应用户操作,JavaScript事件是由访问 Web页面的用户引起的一系列操作,例如:用户点击当用户执行某些操作的时候,再去执行一系列代码。
  • 事件浏览器用户操作进行交互的动作。

js事件驱动机制

  • JavaScript中事件有三元素:事件源事件对象事件处理函数
  • 在这里插入图片描述
  • 事件源:一般是页面的标签元素,浏览器的窗口,鼠标的点击等等。
  • 事件对象:包含了该事件的所有信息,如事件触发的坐标,事件的类型等,记录的是事件中的事件信息
  • 事件处理函数:对这个事件最后的处理行为。

三种事件模型

1.标签绑定

  • 这种模型是最传统接单的一种处理事件的方法。在内联模型中,事件处理函数HTML标签的一个属性,用于处理指定事件。虽然内联在早期使用较多,但它是和 HTML 混写的, 并没有与HTML分离,不推荐使用。
  • 缺点:1、违背了三层分离原则;2、无法得到时间对象;3、事件源需要在绑定时,使用this关键字传递。
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title>事件对象</title>
		<style type="text/css">
			.box{
				height: 200px;
				width: 200px;
				background-color: pink;
			}
		</style>
	</head>
	<body>
		<div class="box"></div>
		<button type="button" onclick="display()">变换颜色</button>   //内联模式
		<script type="text/javascript">
			let num = 1
			let temp = document.getElementsByClassName("box")[0];
			
			function display(){
				if(num == 1){
					temp.style.backgroundColor = "green";
					num = 0;
				}else{
					temp.style.backgroundColor = "pink";
					num = 1;
				}
			}
		</script>
	</body>
</html>

2.DOM0事件模型

  • 为了实现三层分离,w3c提供了基于DOM0的绑定方式,先获取DOM对象,再绑定事件这种方式较为常用。
  • 绑定事件:dom对象.onxxx = function()
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title>事件对象</title>
		<style type="text/css">
			.box{
				height: 200px;
				width: 200px;
				background-color: pink;
			}
		</style>
	</head>
	<body>
		<div class="box"></div>
		<button type="button" class="but">变换颜色</button>
		<script type="text/javascript">
			let num = 1
			let box = document.getElementsByClassName("box")[0];
			let but = document.getElementsByClassName("but")[0];
			but.onclick = function(){   //DOM0事件模型
				if(num == 1){
					box.style.backgroundColor = "green";
					num = 0;
				}else{
					box.style.backgroundColor = "pink";
					num = 1;
				}
			}
		</script>
	</body>
</html>

3.DOM2事件模型

  • DOM2支持同一DOM元素注册多个同种事件。DOM2新增了捕获和冒泡的概念。DOM2事件通过addEventListenerremoveEventListener管理。
  • addEventListener有三个参数,分别为:事件名称事件回调捕获/冒泡
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title>事件对象</title>
		<style type="text/css">
			#div1{
				height: 200px;
				width: 200px;
				background-color: pink;
			}
		</style>
	</head>
	<body>
		<div id="div1"></div>
		<button type="button" id="button1">变换颜色</button>
		
		<script type="text/javascript">
			let button = document.getElementById("button1");
			let div = document.getElementById("div1");
			let num = 1;
			
			//第一个参数不需要加no,直接写事件名称即可
			//第二个参数是事件处理函数,函数第一个参数默认就是事件对象
			//第三个参数是bool值,表示捕获或者冒泡流
			button.addEventListener("click",function(){
				if(num == 1){
					div.style.backgroundColor = "green";
					num = 0;
				}else{
					div.style.backgroundColor = "pink";
					num = 1;
				}
			},false);
		</script>
	</body>
</html>

捕获流与冒泡流

  • 相比DOM0,去掉了前边的on而已。回调时和DOM0一样,也会默认传入一个event参数,同时this是指触发该事件的dom节点。最后一个参数是布尔型true代表捕获事件,false代表冒泡事件
  • 在这里插入图片描述
  • 意思就是说,某个元素触发了某个事件,最先得到通知的是window,然后是document,依次而入,直到真正触发事件的那个元素(目标元素)为止,这个过程就是捕获。接下来,事件会从目标元素开始起泡,再依次而出,直到window对象为止,这个过程就是冒泡
  • 由此可以看出,捕获事件要比冒泡事件先触发。

removeEventListener事件移除

在JavaScript中,removeEventListener 方法用于从指定元素上移除先前添加的事件监听器。这在使用 addEventListener 添加事件监听器后,想要在某个时刻移除这些监听器时非常有用。

  • 解除事件语法:元素名.removeEventListener("事件名称", "事件回调", "捕获/冒泡")。

    • 事件名称,就是说解除哪个事件呗。
    • 事件回调,是一个函数,这个函数必须和注册事件的函数是同一个。
    • 事件类型,布尔值,这个必须和注册事件时的类型一致
  • 也就是说,名称回调类型,三者共同决定解除哪个事件,缺一不可。

var btn = document.getElementById("box");
//将回调存储在变量中
var fn = function(e){
alert("ok");
};
//绑定
btn.addEventListener("click", fn, false);
//解除
btn.removeEventListener("click", fn, false);

事件类型

鼠标事件mouse event

  • 通过鼠标触发事件,类似用户的行为
属性描述
onclick单击鼠标时
onblclick双击鼠标时
ondrag拖动元素时
ondragend拖动操作结束时
ondragenter当元素被拖动至有效的拖放目标时
ondragleave当元素离开有效拖放目标时
ondragover当元素被拖动至有效拖放目标上方时
ondragstart当拖动操作开始时
ondrop当被拖动元素正在被拖放时
onmousedown当按下鼠标按钮时
onmousemove当鼠标指针移动时
onmouseout当鼠标指针移出元素时
onmouseover当鼠标指针移至元素之上时
onmouseup当松开鼠标按钮时
onmousewheel当转动鼠标滚轮时
onscroll当滚动元素的滚动条时

键盘事件keyboard event

属性描述
onkeydown当按下按键时
onkeypress当按下并松开按键时
onkeyup当松开按键时

多媒体事件media event

  • 通过视频(videos),图像(images)或者音频(audio) 触发该事件,多应用于HTML媒体元素。

在这里插入图片描述

表单事件form event

  • 表单事件在HTML表单中触发 (适用于所有 HTML 元素, 但该HTML元素需在form表单内)。

在这里插入图片描述

窗口事件window event

  • 由窗口触发该事件 (适用于标签)。

在这里插入图片描述

其他事件

在这里插入图片描述

事件对象

切换图片小案例

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>

<body>
  <img src="./img/meinv1.png" alt="" id="pic" width="500px" height="500px">
  <button id="up">上一张</button>
  <button id="down">下一张</button>
  <script>
   let pic = document.getElementById('pic')
   let up = document.getElementById('up')
   let down = document.getElementById('down')
    let max = 4, min = 1
    let now_pic = min
    down.onclick = function () {
      if (now_pic == max) {
        now_pic = min
      }
      else {
        now_pic++
      }
      pic.src = `./img/meinv${now_pic}.png`
    }
    up.onclick = function () {
      if (now_pic == min) {
        now_pic = max
      }
      else {
        now_pic--
      }
      pic.src = `./img/meinv${now_pic}.png`
    }
  </script>
</body>

</html>

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

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

相关文章

适用于 macOS 的最佳独立 HBO Max 客户端

适用于 macOS 的最佳独立 HBO Max 应用程序。不再在浏览器选项卡之间切换。只需直接从 Dock 启动 Clicker for HBO Max 即可开始狂欢。 HBO Max 客户端 Clicker for HBO Max 下载 Clicker for HBO Max mac版安装教程 软件下载完成后&#xff0c;双击pkg根据提示进行安装 Clic…

LineVul实验复现及相关问题

最近在复现 LineVul 这篇文章的实验&#xff0c;本文主要用于简化文章复现流程和记录复现过程中出现的问题。 1 安装依赖环境 pip install gdown pip install transformers pip install captum pip install torch torchvision torchaudio pip install numpy pip install tqdm…

Jmeter性能测试(三)

token鉴权处理 1、添加json提取器 2、写jsonpath表达式在响应Body中提取鉴权token token&#xff1a;变量名&#xff0c;可以直接引用 $…token&#xff1a;token数据在响应中的字段名称&#xff0c;根据自己情况写就行 3、将提取出来的token添加到请求头中 重点&#xff…

基于centos7的Linux虚拟机系统安装jdk宝宝级教学

我放在opt文件夹中的soft文件夹中的Java文件夹里面 创建opt文件夹 mkdir opt 进入opt文件夹 cd opt 创建 soft文件夹 mkdir soft 进入soft文件夹 cd soft 创建Java文件夹 mkdir java 下载链接 https://www.oracle.com/java/technologies/javase/javase-jdk8-downlo…

【深度学习】Diffusion扩散模型原理解析1

1、前言 diffusion&#xff0c;这几年一直很火的模型&#xff0c;比如这段时间在网上的文生图大模型——Stable diffusion。就是以diffusion作为基底模型&#xff0c;但由于该模型与VAE那边&#xff0c;都涉及了较多了概率论知识&#xff0c;实在让人望而却步。所以&#xff0…

luceda ipkiss教程 67:修改器件端口名

如果要替换线路中的器件&#xff0c;但是要替换的器件端口名称又不一样&#xff0c;那该怎么办呢&#xff1f;去对应改线路中端口的名称太过繁琐&#xff0c;这就需要需要器件的端口名&#xff0c;如&#xff1a; 改y分束器的端口名 改了端口名称&#xff0c;线路中的器件就可…

【大学物理】东北大学-马文蔚听课笔记

4.1刚体的定轴转动_哔哩哔哩_bilibili 此笔记为课堂学习笔记~ 4.1刚体的定轴转动 基本教学要求 什么时刚体呢&#xff1f; 研究刚体运动切口 平动&#xff1a;刚体中所有的点的运动轨迹都完全相同。 转动&#xff1a;分为&#xffe5;定轴转动和非定轴转动 刚体转动的角速度…

Axure实现菜单抽屉效果

Axure是怎么实现如下效果的&#xff1f; 菜单打开和收起侧边栏菜单抽屉效果 实现效果 两级菜单&#xff0c;点击菜单收起其他菜单&#xff0c;打开当前菜单。 实现原理 单击一级菜单时&#xff0c;1&#xff09;切换当下二季菜单的显示/隐藏状态 2&#xff09;隐藏其他菜单…

MultiBoot 和 QuickBoot

目录 MultiBoot简介MultiBoot 实现方式设置 bitstream 属性使用 ICAPE2 原语WBSTAR 寄存器定义 MultiBoot 工作流程生成mcs固化文件 Tcl 指令Fallback状态寄存器MultiBoot 正常加载状态看门狗1超时状态看门狗2超时状态CRC 错误和无 DESYNC 命令IDCODE 错误状态CRC 错误状态 Wat…

0510_IO5

练习题&#xff1a; #include <stdio.h>#include <string.h>#include <stdlib.h>#include <sys/types.h>#include <unistd.h>#include <sys/stat.h>#include <fcntl.h>#include <pthread.h>#include <semaphore.h>#incl…

判断字符是否唯一——力扣

面试题 01.01. 判定字符是否唯一 已解答 简单 相关标签 相关企业 提示 实现一个算法&#xff0c;确定一个字符串 s 的所有字符是否全都不同。 示例 1&#xff1a; 输入: s "leetcode" 输出: false 示例 2&#xff1a; 输入: s "abc" 输出: true…

【LLM 论文】UPRISE:使用 prompt retriever 检索 prompt 来让 LLM 实现 zero-shot 解决 task

论文&#xff1a;UPRISE: Universal Prompt Retrieval for Improving Zero-Shot Evaluation ⭐⭐⭐⭐ EMNLP 2023, Microsoft Code&#xff1a;https://github.com/microsoft/LMOps 一、论文速读 这篇论文提出了 UPRISE&#xff0c;其思路是&#xff1a;训练一个 prompt retri…

【JVM】了解JVM规范中的虚拟机结构

目录 JVM规范的主要内容 1&#xff09;字节码指令集(相当于中央处理器CPU) JVM指令分类 2&#xff09;Class文件的格式 3&#xff09;数据类型和值 4&#xff09;运行时数据区 5&#xff09;栈帧 6&#xff09;特殊方法 7&#xff09;类库 JVM规范的主要内容 1&#…

软件测试人员必备的60个测试工具,果断收藏了!_测试工程师必备软件

据统计&#xff0c;中国软件外包市场的潜力和机会已远远超过软件王国印度&#xff0c;不过由于软件人才的严重不足致使我国软件发展遭遇“瓶颈”。国家为了大力培养软件人才&#xff0c;不断采取积极有效的措施。我国对软件测试人才的需求数量还将持续增加&#xff0c;因此软件…

TC377TX 超声波雷达数据更新缓慢问题排查

1、问题表象 通过标定数据查看超声波雷达实时的距离大小,发现距离并没有实时更新,而是在实际值与默认值之间跳变,更新十分缓慢。   泊车功能必须依赖超声波雷达测距来实现,当雷达数据更新缓慢时,会导致泊车失败。 2、超声波雷达测距实现原理 MCU给超声波雷达发送一个40…

番外篇 | YOLOv8改进之利用SCINet解决黑夜目标检测问题 | 低照度图像增强网络

前言:Hello大家好,我是小哥谈。自校正照明网络(Self-Calibrating Illumination Network, SCINet)是一种基于深度学习的图像照明算法,可以自动分析图像的内容并根据图像内容自动优化照明。SCINet是一种专为低光照图像增强设计的框架。它通过级联照明学习过程和权重共享机制…

【智能优化算法】金豺狼优化算法(Golden jackal optimization,GJO)

金豺狼优化(Golden jackal optimization,GJO)是期刊“Expert Systems with Applications”&#xff08;中科院一区IF 8.3&#xff09;的2022年智能优化算法 01.引言 金豺狼优化(Golden jackal optimization,GJO)旨在为解决实际工程问题提供一种替代的优化方法。GJO的灵感来自金…

YOLO数据集制作(一)|Labelme标注的矩形框json文件转txt

以下教程用于将使用Labelme软件标注生成的json格式文件转成YOLO使用的txt格式&#xff0c;适用场景&#xff1a;矩形框 使用方法&#xff1a;将json文件夹路径填到json_dir后&#xff0c; 将保存转化后txt的路径填入txt_dir后&#xff0c;运行即可转化。 运行完成后会生成label…

从头理解transformer,注意力机制(上)

深入理解注意力机制和Transformer架构&#xff0c;及其在NLP和其他领域的突破。 要想理解transformer&#xff0c;先从编码器解码器结构开始理解 基于transformer发展起来的llm 右边&#xff1a;只有解码器&#xff0c;强项是生成内容 左边&#xff1a;只有编码器&#xff0…

云动态摘要 2024-05-07

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 [免费试用]即刻畅享自研SaaS产品 腾讯云 2024-04-25 涵盖办公协同、营销拓客、上云安全保障、数据分析处理等多场景 云服务器ECS试用产品续用 阿里云 2024-04-14 云服务器ECS试用产品续用…