轻松学会JavaScript事件

news2024/12/24 2:38:53

文章目录

    • 事件与事件流
    • 事件监听(绑定事件方法)
    • JavaScript事件
      • 鼠标事件
      • 表单事件
      • 键盘事件
      • UI事件
    • 快速投票

在这里插入图片描述

  事件可以说是JavaScript最引人注目的特性,因为它提供了一个平台,让用户不仅能浏览页面中的内容,而且能跟页面进行交互。

  本文将围绕JavaScript事件进行讲解,通过重案例代码轻知识理论结合的方式带您简单的学会JavaScript事件的编写。


事件与事件流

1、事件

  事件是文档或者浏览器窗口发生的,特定的交互瞬间。事件是发生在HTML元素上的某些特定的事情,它的作用是使用页面具有某些行为,并执行某些动作。
  类比生活中的例子,学生听到上课铃响,就会走进教室。这里上课铃响相当于事件,走进教室相当于响应事件的动作。在一个网页中,已经预先定义好了很多事案件,开发人员可以编写相应的事件处理程序来响应相应的时间。
事件可以是浏览器行为,也可以是用户行为。例如下面3个行为都是事件。

  • 一个页面完成加载。
  • 某个按钮被单击。
  • 鼠标指针移动到某个元素上面。

2、事件流

  了解了事件的概念之后,还需要了解事件流的概念。由于DOM是树状结构,因此当某个子元素被单击时,它的父元素实际上也被单击了,它的的父元素的父元素也被单击了,一直到根元素。因此鼠标单击产生的并不是一个事件,而是一系列事件,这一系列事件就组成了事件流。
  一般情况下,当某个事件发生的时候,实际上都会产生一个事件流。而我们并不需要对事件流中的所有事件都编写处理程序,而只需要对我们关心的那一个事件编写程序进行处理就可以了。
在这里插入图片描述
  既然事件发生时总是以流的形式一次发生,那么就要分个先后循序。如上图所示,产生事件流的过程可以分为3个阶段:从最外层的根元素HTML开始依次向下,称为捕获阶段;到达目标元素p时,称为到达阶段;最后依次向上回到根元素,称为冒泡阶段。
  DOM轨发中规定,捕获阶段不会命中事件,如果需要的话,每个对象在捕获阶段和冒泡阶段都可以获得一次处理事件的机会。


事件监听(绑定事件方法)

  页面中的事件都需要一个函数来响应,这类函数通常被称为事件处理函数。从另外一个角度来说,这类函数时时都在监听是否有事件发生,因此它们又被称为事件监听函数。下面将介绍三种绑定事件方法。

1、简单的行内写法

  通常对于简单的事件,没必要编写大量复杂的代码,在HTML的标签中就可以直接定义事件处理函数,而且通常它们的兼容性很好。

案例代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>简单的行内写法</title>
	</head>
	<body>
		<button onclick="show()">btn</button>
	</body>
	<script>
		function show(){
			alert('简单的行内写法');
		}
	</script>
</html>

这种写法虽然方便,但是有两个缺点:

  • 如果有多个元素需要有相同的事件处理方式,则需要为每个元素单独写事件监听函数,这样很不方便;
  • 这种方式不符合结构与行为分离的指导思想。

2、使用 HTML DOM 来分配事件

  HTML DOM 允许您使用 JavaScript 来向 HTML 元素分配事件。

案例代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>使用 HTML DOM 来分配事件方法</title>
	</head>
	<body>
		<button>btn</button>
	</body>
	<script>
		var btn = document.querySelector('button');
		btn.onclick = function(){
			alert('使用 HTML DOM 来分配事件方法');
		}
	</script>
</html>

3、设置事件监听函数

  标准DOM定义了两个方法用于添加和删除事件监听函数,即addEventListener()和removeEventListener()。

案例代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>设置事件监听函数方法</title>
	</head>
	<body>
		<button>btn</button>
	</body>
	<script>
		var btn = document.querySelector('button');
		btn.addEventListener('click',function(){
			alert('设置事件监听函数方法');
		})
	</script>
</html>

  在通常情况下,我们都使用默认事件冒泡机制。因此,如果一个容器元素里面 有多个同类子元素,而且要给这些子元素绑定同一个事件监听函数,则通常有两种方法:

  • 选出所有的子元素,然后分别给他们绑定事件监听函数;
  • 把事件监听函数绑定到容器元素上,然后在函数内部过滤出需要的子元素,最后进行处理。

总结一下,事件监听函数的格式是:
  [object].addEventListener(“event_name”,fnHandler,bCapture);

相应地,removeEventListener()方法用于移除某个事件监听函数。

案例代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>removeEventListener()方法</title>
	</head>
	<head>
		<style>
			#myDIV {
				background-color: coral;
				border: 1px solid;
				padding: 50px;
				color: white;
			}
		</style>
	</head>
	<body>

		<div id="myDIV"> div 元素添加了 onmousemove 事件句柄,鼠标在桔红色的框内移动时会显示随机数。
			<p>点击按钮移除 DIV 的事件句柄。</p>
			<button onclick="removeHandler()" id="myBtn">点我</button>
		</div>
		<p id="demo"></p>
		<script>
			document.getElementById("myDIV").addEventListener("mousemove", myFunction);

			function myFunction() {
				document.getElementById("demo").innerHTML = Math.random();
			}

			function removeHandler() {
				document.getElementById("myDIV").removeEventListener("mousemove", myFunction);
			}
		</script>

	</body>
</html>

运行效果:

请添加图片描述

JavaScript事件

在这里插入图片描述
常见的JavaScript事件有四种:

  • 鼠标事件: 使用鼠标指针在页面上执行某些操作时所触发的事件。
  • 表单事件: 由HTML表单内的动作触发的事件。
  • 键盘事件: 使用键盘在页面上执行某些操作时所触发的事件。
  • UI事件: UI(User Interface,用户界面)事件,指的是那些不一定与用户操作有关的事件。

鼠标事件

事件名描述
onclick鼠标单击某个对象
ondblclick鼠标双击某个对象
onmouseover鼠标被移动到某个元素之上
onmouseout鼠标从某元素移开
onmousedown某个鼠标按键被按下
onmousemove鼠标被移动
onmouseup某个鼠标按键被松开

一个案例带您掌握鼠标事件的应用:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>鼠标事件</title>
		<style>
			li{
				height: 50px;
				border: 1px solid #f00;
			}
		</style>
	</head>
	<body>
		<ul>
			<li>鼠标单击我看效果</li>![请添加图片描述](https://img-blog.csdnimg.cn/0e0d4e66943948498b4592ebc424c542.gif)

			<li>鼠标双击我看效果</li>
			<li>鼠标移入我看效果</li>
			<li>鼠标移出我看效果</li>
			<li>鼠标在我这不停移动看效果</li>
		</ul>
	</body>
	<script>
		var liEles = document.querySelectorAll('li');
		liEles[0].onclick = function(){
			liEles[0].style.backgroundColor = '#ccc';
		}
		
		liEles[1].ondblclick = function(){
			liEles[1].style.backgroundColor = '#f00';
		}
		
		liEles[2].onmouseover = function(){
			liEles[2].style.backgroundColor = '#0f0';
		}
		
		liEles[3].onmouseout = function(){
			liEles[3].style.backgroundColor = '#00f';
		}
		
		liEles[4].onmousemove = function(){
			console.log('我在移动....')
		}
	</script>
</html>

运行效果:

请添加图片描述

表单事件

事件名描述
onfocus元素获得焦点
onblur元素失去焦点
onchange用户改变域的内容
onreset表单重置时触发
onsubmit表单提交时触发

注意:表单重置事件不支持input标签,支持form标签。

一个案例带您掌握表单事件的应用:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>表单事件</title>
		<style>
			span{
				margin-left: 20px;
				color: #ccc;
			}
			
			.err{
				color: #f00;
			}
			
			.right{
				color: #0f0;
			}
		</style>
	</head>
	<body>
		<form>
			姓名:<input type="text"/><span></span>
		</form>
	</body>
	<script>
		var inputEle = document.querySelector('input');
		var spanEle = document.querySelector('span');
		
		//输入框绑定获得焦点事件,给span标签插入内容
		inputEle.onfocus=function(){
			spanEle.innerText='姓名长度为2-12位';
			spanEle.className='';
		}
		
		//输入框绑定失去焦点事件,给span标签插入内容
		inputEle.onblur = function(){
			//在输入框失去焦点之后,应该获取输入框中的内容,然后对内容的长度进行判断
			// console.dir(inputEle);
			var textValue =inputEle.value;
			if(textValue.length<2||textValue.length>12){
				spanEle.innerText='姓名长度不符合要求,应在2-12位';
				spanEle.className='err';
			}else{
				spanEle.innerText='姓名长度符合要求';
				spanEle.className='right';
			}
		}
	</script>
</html>

效果展示:

请添加图片描述

键盘事件

事件名描述
onkeydown某个键盘的键被按下
onkeypress某个键盘的键被按下并释放一个键发生
onkeyup某个键盘的键被松开

提示:
键盘事件的事件次序:onkeydown onkeypress onkeyup

案例一:带您掌握键盘事件的应用:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		姓名:<input type="text"/>
	</body>
	
	<script>
		var inputEle = document.querySelector('input');
		
		inputEle.onkeydown = function(){
			console.log('你按下了一个键');
		}
		
		inputEle.onkeyup = function(){
			console.log('你释放了一个键');
		}
	</script>
</html>

通过console控制台去观察键盘按下和松开时的输出信息。

案例二:松开键盘键s,自动获取焦点。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/jQuery3.6.1.js"></script>
	</head>
	<body>
		姓名:<input type="text"/><br />
		自我介绍:<textarea></textarea>
	</body>
	<script>
		var inputEle = document.querySelector('input');
		var textareaEle = document.querySelector('textarea');
		
		inputEle.onkeydown =function(event){
			console.log(event);
		}
		
		
		//按下s键释放后,焦点自动到输入框中
		document.addEventListener('keyup',function(event){
			if(event.keyCode==83){
				inputEle.focus();
			}
		})
		
	</script>
</html>

效果展示:松开键盘s键后,自动获取焦点

请添加图片描述

UI事件

事件名描述
onload某个页面或图像被完成加载
onresize窗口或框架被调整尺寸
onscroll当文档被滚动时发生的事件

提示:
如果重载页面,也会出发unload事件(以及onload事件)

案例代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<style>
		div{
			width: 800px;
			height: 1500px;
			background-color: bisque;
			margin: 0 auto;
		}
	</style>
	<body>
		<div></div>
	</body>
	<script>
		window.onload=function(){
			alert("页面加载完成");
		}
		function reSizeFn(){
			alert("您改变了浏览器窗口大小!");
		}
		var divEle=document.querySelector('div');
		divEle.onscroll=function(){
			alert("您滚动了div!");
		}
	</script>
</html>

快速投票

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

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

相关文章

贪心算法+动态规划 | 眼光不同决定深度不同

前言 上大学那会有门课程叫做【算法与实践】, 算法配上 C 那感觉不要提多爽了。现在回想起来算法不局限于语言&#xff0c;只不过每个语言的语法不一罢了&#xff0c; 但是算法的内在逻辑都是相通的&#xff0c;今天我们通过三个案列来了解分析下算法之一 【贪心算法】。 简介…

显示控件——滑动选择

该控件也是一种调节控件&#xff0c;通过在既定范围内的滑动来选择具体选项值以图达到对变量的调控效果&#xff0c;其UI操作效果类似于拨动密码锁的滚轮。 位置信息&#xff1a;控件在工程页面区域的位置 “X”“Y”为控件区域左上角坐标。 “W”“H”为控件区域宽度和高度&a…

cpu设计和实现(取指)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 cpu设计的本质是数字电路的设计。要是没有verilog、vhdl这些语言&#xff0c;那么剩下来使用的方法基本只有卡诺图这一种了。在数字电路中&#xf…

看懂这篇文章,你就懂了Mybatis的二级缓存

缓存的概述和分类 概述 缓存就是一块内存空间.保存临时数据 为什么使用缓存 将数据源&#xff08;数据库或者文件&#xff09;中的数据读取出来存放到缓存中&#xff0c;再次获取的时候 ,直接从缓存中获取&#xff0c;可以减少和数据库交互的次数,这样可以提升程序的性能&a…

【MySQL】MySQL复制原理与主备一致性同步工作原理解析(原理篇)(MySQL专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码&#xff0c;就职于大型金融公司后端高级工程师&#xff0c;擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

Qt之天气预报实现(一)预备篇

文章目录序章一、思路整理1.1 我的Qt版本信息1.2 我使用的API二、高德开放平台API的申请和使用2.1 API的申请步骤2.1.1 注册高德开放平台账号&#xff08;若已有账号请无视&#xff09;2.1.2 创建API_KEY2.2 API的使用2.2.1 天气查询文档和城市编码下载位置&#xff08;必读&am…

node版本与node-sass版本不兼容时问题解决

在项目运行中会经常遇到node版本号与node-sass版本号不兼容的问题&#xff0c;这时可以有两种解决方案。 附图&#xff1a;node与node-sass的对应关系 1、改node版本号去对应node-sass 2、改node-sass版本号去对应node 一般情况下选择修改node-sass的版本号&#xff0c;这里…

[附源码]SSM计算机毕业设计茶园认养管理平台JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

PGL图学习之图神经网络GNN模型GCN、GAT[系列六]

PGL图学习之图神经网络GNN模型GCN、GAT[系列六] 项目链接&#xff1a;一键fork直接跑程序 https://aistudio.baidu.com/aistudio/projectdetail/5054122?contributionType1 0.前言-学术界业界论文发表情况 ICLR2023评审情况&#xff1a; ICLR2023的评审结果已经正式发布&a…

OPLSAA力场参数之快速建模—MS+Moltemplate

文章目录一、MS中画出分子结构二、根据OPLSAA力场文件设置原子力场1. OPLSAA力场2. 根据OPLSAA力场中的原子质量进行检查3. 在MS中设置为对应的原子编号三、转换为Lammps可以读取的Data文件四、采用Moltemplate自带工具生成Lt文件1. 生成LT文件2. LT文件结构五、引入OPLSAA力场…

Docker 【Nginx集群部署】

目录 1. nginx前置操作 2. 自定义容器 3. nginx常用命令 4. Error 4.1 502(无响应网关/代理) 4.2 404(找不到对应页面) 4.3 400(异常请求) 4.4 响应超时问题 5. 完整版本Nginx配置文件 1. nginx前置操作 1. 下载拉取nginx镜像 docker pull nginx 2. 使用nginx镜像创…

LVS负载均衡群集(DR模式)

LVS-DR工作原理 数据包流向分析 第一步&#xff1a;客户端发送请求到 Director Server (负载均衡器&#xff09;&#xff0c;请求的数据报文到达内核空间。 数据报文 源 IP ------客户端的 IP 目标 IP ------ VIP 源 MAC ------客户端的 MAC 目的 MAC ------ Director Server…

全产业链核心升级 集聚创新大展宏图——慕尼黑华南电子展回顾

展会简介 2022年11月15日至17日&#xff0c;高交会 - 智能制造、先进电子及激光技术博览会旗下成员展 &#xff08;LEAP Expo&#xff09;-慕尼黑华南电子展、慕尼黑华南电子生产设备展、华南先进激光及加工应用技术展览会及同期举办的华南电路板国际贸易采购博览会与中国&…

【全网热点】打造全网最全爱心代码仓库【火速领取爱心】

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 本文章收录于专栏 【代码实践】 目录&#x1f319;正文&#x1f30f;部分效果在线演示&#x1f30f;部分效果截屏&#x1f338;文末祝…

操作系统4小时速成:复习内存管理,内部碎片和外部碎片,页式存储管理,段式存储管理,段页式存储管理,虚拟内存,页面置换算法,LRU内存替换算法

操作系统4小时速成&#xff1a;复习内存管理&#xff0c;内部碎片和外部碎片&#xff0c;页式存储管理&#xff0c;段式存储管理&#xff0c;段页式存储管理&#xff0c;虚拟内存&#xff0c;页面置换算法,LRU内存替换算法 2022找工作是学历、能力和运气的超强结合体&#xff…

react面试题详解

React-Router怎么设置重定向&#xff1f; 使用<Redirect>组件实现路由的重定向&#xff1a; <Switch><Redirect from/users/:id to/users/profile/:id/><Route path/users/profile/:id component{Profile}/> </Switch>当请求 /users/:id 被重定…

显示控件——直线进度条

该控件是指定一个图标&#xff08;矩形长条&#xff09;&#xff0c;通过其滑动在水平方向或者垂直方向实现来调节指定存储空间的变量的效果。滑动范围对应变量地址数据&#xff0c;显示位置通过变量设定。可以配合“滑动调节”触摸控件进行设置。 位置信息&#xff1a;控件在工…

Android App接管手势处理TouchEvnet中单点触摸和多点触控的讲解及实战(附源码 超简单实用)

运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一、单点触摸 dispatchTouchEvent onInterceptTouchEvent onTouchEvent三个方法的输入参数都是手势事件MotionEvent&#xff0c;其中包含触摸动作的所有信息&#xff0c;各种手势操作都从MotionEvent中获取触摸信息并判断处…

Python3,5行代码,让你拥有无限量壁纸美图,终于告别手动下载了。

这里写目录标题1、引言2、代码实战2.1 手动下载2.2 代码批量下载3、总结1、引言 小屌丝&#xff1a;鱼哥&#xff0c; 你电脑桌面壁纸挺好看啊。 小鱼&#xff1a;那是&#xff0c; 毕竟我的审美观在这摆着呢。 小屌丝&#xff1a;你这话&#xff0c;让我不服… 小鱼&#xff…

STC51单片机30——单个数码管显示

#include<reg51.h> // 包含51单片机寄存器定义的头文件 /************************************************** 函数功能&#xff1a;延时函数&#xff0c;延时一段时间 ***************************************************/ void delay(void) { unsigned …