【Java 进阶篇】JavaScript 事件详解

news2024/11/30 14:28:35

在这里插入图片描述

在本篇博客中,我们将深入探讨JavaScript事件,这是网页交互的核心。我们将从什么是事件开始,然后逐步介绍事件的类型、如何注册事件、事件处理程序、事件对象以及事件冒泡等相关内容。最终,我们将提供大量的示例代码来帮助您更好地理解JavaScript事件。

什么是事件?

在Web开发中,事件是用户或浏览器发生的事情。这些事件可以是用户与页面互动,例如点击按钮、输入文本或鼠标移动,也可以是页面本身发生的事情,如文档加载完成或定时器触发。

JavaScript允许我们捕获、处理和响应这些事件,使得我们可以创建动态和交互性的网页。

事件的类型

JavaScript支持多种不同类型的事件,包括但不限于:

1. 鼠标事件

  • click:鼠标点击事件。
  • mouseover:鼠标移动到元素上时触发。
  • mouseout:鼠标从元素上移开时触发。
  • mousedown:鼠标按钮被按下时触发。
  • mouseup:鼠标按钮被释放时触发。

2. 键盘事件

  • keydown:键盘上的键被按下时触发。
  • keyup:键盘上的键被释放时触发。

3. 表单事件

  • submit:表单提交时触发。
  • change:表单元素的值发生改变时触发。
  • input:输入框的内容发生变化时触发。

4. 网页加载事件

  • load:整个页面及外部资源加载完成时触发。
  • DOMContentLoaded:DOM结构加载完成时触发,不必等待图片等外部资源加载完毕。

5. 自定义事件

您还可以创建自定义事件,以满足特定需求。

如何注册事件

要在HTML元素上注册事件,您可以使用HTML属性或JavaScript代码。以下是两种主要方法:

1. HTML属性

可以使用以下HTML属性将事件处理程序附加到HTML元素:

<button onclick="myFunction()">点击我</button>

这里onclick是一个事件属性,它告诉浏览器在按钮被点击时执行myFunction函数。

2. JavaScript代码

使用JavaScript,您可以使用addEventListener方法注册事件处理程序:

const button = document.getElementById('myButton');
button.addEventListener('click', myFunction);

这样的方式更具灵活性,可以在JavaScript中动态创建、移除和控制事件。

事件处理程序

事件处理程序是JavaScript函数,它定义了事件触发时要执行的操作。事件处理程序通常带有一个事件对象参数,以便访问事件的相关信息。

function myFunction(event) {
  alert('按钮被点击了!');
}

事件对象

事件处理程序的参数通常是事件对象,它包含有关事件的详细信息,例如事件类型、目标元素、鼠标坐标等。

function myFunction(event) {
  console.log('事件类型:' + event.type);
  console.log('目标元素:' + event.target);
  console.log('鼠标X坐标:' + event.clientX);
  console.log('鼠标Y坐标:' + event.clientY);
}

事件对象的属性和方法因事件类型而异,可以根据需要使用。

事件冒泡

事件冒泡是指事件从目标元素冒泡到文档树根元素的过程。这意味着事件会先在最深的嵌套元素上触发,然后逐级向上传播,直到文档树的根元素。

<div id="parent">
  <button id="child">点击我</button>
</div>
const parent = document.getElementById('parent');
const child = document.getElementById('child');

parent.addEventListener('click', function() {
  console.log('父元素被点击');
});

child.addEventListener('click', function() {
  console.log('子元素被点击');
});

在这个示例中,当点击按钮时,事件会首先在子元素上触发,然后冒泡到父元素。因此,控制台将输出以下内容:

子元素被点击
父元素被点击

您可以使用stopPropagation方法来阻止事件继续冒泡:

child.addEventListener('click', function(event) {
  console.log('子元素被点击');
  event.stopPropagation(); // 阻止事件冒泡
});

在这种情况下,只有子元素上的事件处理程序会运行,父元素上的不会执行。

示例代码

让我们通过一些示例代码来演示JavaScript事件的使用。

示例 1:点击按钮改变文本

<!DOCTYPE html>
<html>
<head>
  <title>点击按钮改变文本</title>
</head>
<body>
  <button id="myButton">点击我</button>
  <p id="myText">我会在按钮点击后改变</p>
  <script>
    const button = document.getElementById('myButton');
    const text = document.getElementById('myText');
    
    button.addEventListener('click', function() {
      text.textContent = '按钮被点击了!';
    });
  </script>
</body>
</html>

示例 2:鼠标悬停显示提示

<!DOCTYPE html>
<html>
<head>
  <title>鼠标悬停显示提示</title>
  <style>
    .tooltip {
      position: relative;
      display: inline-block;
      cursor: pointer;
    }
    .tooltiptext {
      visibility: hidden;
      width: 120px;
      background-color: #333;
      color: #fff;
      text-align: center;
      border-radius: 6px;
      padding: 5px;
      position: absolute;
      z-index: 1;
      bottom: 125%;
      left: 50%;
      margin-left: -60px;
      opacity: 0;
      transition: opacity 0.3s;
    }
    .tooltip:hover .tooltiptext {
      visibility: visible;
      opacity: 1;
    }
  </style>
</head>
<body>
  <div class="tooltip">
    鼠标悬停我
    <span class="tooltiptext">这是一个提示</span>
  </div>
</body>
</html>

这两个示例展示了事件处理程序的实际应用,以及如何与CSS样式和HTML元素互动,创造出各种交互效果。

结语

JavaScript事件是Web开发中不可或缺的一部分,使得网页变得更加生动和交互。在本博客中,我们深入探讨了事件的类型、注册事件的方法、事件处理程序、事件对象以及事件冒泡。通过不断练习和实验,您将能够掌握JavaScript事件,创造出更具交互性的网页。祝您编写愉快!

如果您对特定主题有更多的疑问或需要更多的示例代码,请随时向我们提问。我们很乐意为您提供帮助。

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

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

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

相关文章

【LeetCode】每日一题两数之和寻找正序数组的中位数找出字符串中第一个匹配项的下标在排序数组中查找元素的第一个和最后一个位置

主页点击直达&#xff1a;个人主页 我的小仓库&#xff1a;代码仓库 C语言偷着笑&#xff1a;C语言专栏 数据结构挨打小记&#xff1a;初阶数据结构专栏 Linux被操作记&#xff1a;Linux专栏 LeetCode刷题掉发记&#xff1a;LeetCode刷题 算法&#xff1a;算法专栏 C头…

二、K8S之Pods

Pod 一、概念 K8S作为一个容器编排管理工具&#xff0c;它可以自动化容器部署、容器扩展、容器负载均衡等任务&#xff0c;并提供容器的自愈能力等功能。在Kubernetes中&#xff0c;Pod是最基本的调度单元&#xff0c;它是一组共享存储和网络资源的容器集合&#xff0c;通常是…

Java集合类ArrayList的应用-杨辉三角的前n行

目录 一、题目 杨辉三角 二、题解 三、代码 四、总结 一、题目 题目链接&#xff1a;https://leetcode.cn/problems/pascals-triangle/description/ 杨辉三角 题目描述&#xff1a;给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨…

充换电企业开迈斯低成本提升线上应用稳定性的最佳实践

作者&#xff1a;开迈斯新能源 开迈斯新能源科技有限公司于 2019 年 5 月 16 日成立&#xff0c;目前合资股东分别为大众汽车&#xff08;中国&#xff09;投资有限公司、中国第一汽车股份有限公司、一汽-大众汽车有限公司[增资扩股将在取得适当监督&#xff08;包括反垄断&am…

vh、vw、vmin、vmax

1、分别是什么&#xff1f; vh:指屏幕可见视窗的高&#xff0c; vw:指屏幕可见视窗的宽&#xff0c; vmin:vh和vw之间选较小的值&#xff0c; vmax:vh和vw之间选较大的值。 2、和百分比的区别 百分比时基于父元素的宽高&#xff0c;而vh\vw\vmin\vmax基于屏幕可见视图的宽…

【MySQL JDBC】使用Java连接MySQL数据库

一、什么是JDBC&#xff1f; 理解API的概念 API&#xff1a;Application Programing Interface -- 应用程序编程接口写好一个程序&#xff0c;这个程序需要给别人提供哪些功能&#xff1f;这些功能就是通过一些 函数/类 这样的方式来提供的。例如 Random、Scanner、ArrayList..…

2.Python-用Flask框架创建一个简单的Web程序

怎么安装Flask框架 在终端输入以下命令&#xff1a; pip install flask 验证flask安装&#xff1a; flask --version 编写app.py文件 app文件py如下&#xff1a; #导入flask框架中的两个模块 #Flask允许创建一个Flask应用实例&#xff0c;处理路由、请求和响应等功能 #render…

zookeeper应用场景(二)

单机环境下可以利用jvm级别的锁&#xff0c;比如synchronized、Lock等来实现锁&#xff0c;如果是多机部署就需要一个共享数据存储区域来实现分布式锁 一、分布式锁实现方式 1、基于数据库实现分布式锁 可以用数据库唯一索引来实现 2、基于redis实现分布式锁 redis实现的分…

测试除了点点点,还有哪些内容呢?

今天和一个网友讨论了一下关于互联网行业中测试的情况&#xff0c;希望能够了解现在的互联网行业主要的测试工作内容。小编根据以往的工作经历和经验情况&#xff0c;来做一个总结和整理。 1、岗位分类 现在的岗位划分主要是分为两大类&#xff1a;测试工程师 和 测试开发工程…

1、验证1101序列(Moore)

题目要求&#xff1a; 用Moore型状态机验证1101序列。 题目描述&#xff1a; 用使用状态机验证1101序列&#xff0c;注意&#xff1a;允许重复子序列。如图 端口描述&#xff1a; module moore_1101(input clk,//时钟信号input clr,//reset复位信号&#xff0c;高电平有效in…

Netty 入门 — 亘古不变的Hello World

这篇文章我们正式开始学习 Netty&#xff0c;在入门之前我们还是需要了解什么是 Netty。 什么是 Netty 为什么很多人都推崇 Java boy 去研究 Netty&#xff1f;Netty 这么高大上&#xff0c;它到底是何方神圣&#xff1f; 用官方的话说&#xff1a;Netty 是一款异步的、基于事…

【网络协议】聊聊ifconfig

我们知道在linux是ifconfig查看ip地址&#xff0c;但是ip addr也可以查看 IP 地址是一个网卡在网络世界的通讯地址&#xff0c;相当于我们现实世界的门牌号码。 从IP地址的划分来看&#xff0c;C类地址只可以容纳254个&#xff0c;而B类6W多&#xff0c;那么又没有一种折中的…

系统文件IO、文件描述符fd、重定向、文件系统、动态库和静态库

目录 C文件接口系统文件I/O系统调用和库函数文件描述符0 & 1 & 2FILE和fd的关系文件描述符的分配规则 重定向重定向的本质输出重定向输入重定向追加重定向 dup2函数 FILE理解文件系统了解磁盘的物理结构逻辑抽象文件系统文件系统的图解和解析通过文件系统来理解ls -al通…

74.C++ STL stack容器

目录 1.什么是stack 2.stack的构造函数 3.赋值操作 4.数据存取操作 5.大小操作 1.什么是stack stack 是 C 标准库中的容器适配器&#xff0c;它提供了一个堆栈&#xff08;栈&#xff09;数据结构的封装&#xff0c;用于管理元素的插入和移除。栈是一种后进先出的数据结构…

【RWKV】如何新增一个自定义的Tokenizer和模型到HuggingFace

0x0. 前言 RWKV社区在Huggingface上放了rwkv-4-world和rwkv-5-world相关的一系列模型&#xff0c;见&#xff1a;https://huggingface.co/BlinkDL/rwkv-4-world & https://huggingface.co/BlinkDL/rwkv-5-world &#xff0c;然而这些模型的格式是以PyTorch的格式进行保存的…

$ vue -Vbash: vue: command not found

$ vue -V bash: vue: command not found报这个错&#xff0c;我们需要找到vue安装路径&#xff0c;添加在环境变量的用户变量中&#xff1a; 1、vue安装路径 2、编辑环境变量 然后重新打开命令框&#xff0c;就可以了

嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)

目录 前言 一、sqlite概念和特性 二、sqlite安装 三、sqlite3数据类型 四、sqlite数据库约束 五、sqlite常用命令 六、SQL语句&#xff08;增删改查&#xff09; 七、sqlite使用实例&#xff08;教学管理数据库&#xff09; 总结 前言 数据在实际工作中应用非常广泛…

Linux网络编程系列之服务器编程——阻塞IO模型

Linux网络编程系列 &#xff08;够吃&#xff0c;管饱&#xff09; 1、Linux网络编程系列之网络编程基础 2、Linux网络编程系列之TCP协议编程 3、Linux网络编程系列之UDP协议编程 4、Linux网络编程系列之UDP广播 5、Linux网络编程系列之UDP组播 6、Linux网络编程系列之服务器编…

Stream流中的 max()和 sorted()方法

需求&#xff1a;某个公司的开发部门&#xff0c;分为开发 一部 和 二部 &#xff0c;现在需要进行年中数据结算。分析&#xff1a; 员工信息至少包含了&#xff08;名称、性别、工资、奖金、处罚记录&#xff09;开发一部有 4 个员工、开发二部有 5 名员工分别筛选出 2 个部门…

1.2 向量的长度与点积

一、向量的点积 两个向量 v ( v 1 , v 2 ) \boldsymbol v(v_1,v_2) v(v1​,v2​) 与 w ( w 1 , w 2 ) \boldsymbol w(w_1,w_2) w(w1​,w2​)的点积或内积是数字 v ⋅ w \boldsymbol v\cdot\boldsymbol w v⋅w&#xff1a; v ⋅ w v 1 w 1 v 2 w 2 ( 1.2.1 ) \boldsymbo…