当前位置: 首页 > news >正文

前端架构师之11_JavaScript事件

1 事件处理

1.1 事件概述

在学习事件前,有几个重要的概念需要了解:

  • 事件
  • 事件处理程序
  • 事件驱动式
  • 事件流
事件

可被理解为是JavaScript侦测到的行为。

这些行为指的就是页面的加载、鼠标单击页面、鼠标滑过某个区域等。

事件处理程序

指的就是JavaScript为响应用户行为所执行的程序代码。

用户单击button按钮,这个行为就会被JavaScript中的click事件侦测到;然后让其自动执行,为click事件编写的程序代码,如在控制台输出“按钮被单击”。

事件驱动式

是指在Web页面中JavaScript的事件,侦测到的用户行为,并执行相应的事件处理程序的过程。

鼠标移入文本区域,文本区域变色这一过程。

事件流

事件发生时,会在发生事件的元素节点与DOM树根节点之间按照特定的顺序进行传播,这个事件传播的过程就是事件流。

网景(Netscape)提出了“事件捕获方式”、微软(Microsoft)提出了“事件冒泡方式”。

  • 事件捕获方式(网景):事件流传播的顺序应该是从DOM树的根节点到发生事件的元素节点。

  • 事件冒泡方式(微软):事件流传播的顺序应该是从发生事件的元素节点到DOM树的根节点。

W3C的解决方案

  • 规定事件发生后,先实现事件捕获,但不会对事件进行处理。
  • 接着进行到目标阶段,执行当前元素对象的事件处理程序,但它会被看成是冒泡阶段的一部分。
  • 最后实现事件的冒泡,逐级对事件进行处理。

1.2 事件的绑定方式

事件绑定指的是为某个元素对象的事件绑定事件处理程序。

  • 行内绑定式
  • 动态绑定式
  • 事件监听式
行内绑定式

事件的行内绑定式是通过HTML标签的属性设置实现的。

<标签名  事件="事件的处理程序">
  • 标签名可以是任意的HTML标签,如 <div> 标签、<button> 标签等;
  • 事件是由on和事件名称组成的一个HTML属性,如单击事件对应的属性名为onclick;
  • 事件的处理程序指的是JavaScript代码,如匿名函数等。

由于开发中提倡JavaScript代码与HTML代码相分离。因此,不建议使用行内式绑定事件。

动态绑定式

JavaScript代码与HTML代码混合编写的问题。

在JavaScript代码中,为需要事件处理的DOM元素对象,添加事件与事件处理程序。

DOM元素对象.事件 = 事件的处理程序;

事件的处理程序一般都是匿名函数或有名的函数。

行内绑定式与动态绑定式的异同

不同点:

  • 实现语法不同,前者通过HTML标签的属性设置,后者在JS中处理DOM对象。
  • 事件处理程序中关键字this的指向也不同。前者指向window对象,后者指向当前正在操作的DOM元素对象。

相同点:

  • 同一个DOM对象的同一个事件只能有一个事件处理程序。
事件监听式

同一个DOM对象的同一个事件只能有一个事件处理程序,即可给同一个DOM对象的同一个事件添加多个事件处理程序。

实现方式有两种,具有兼容性问题,一类是早期版本的IE浏览器(如IE6~8),一类遵循W3C标准的浏览器(以下简称标准浏览器)。

// 早期版本的IE浏览器
DOM对象.attachEvent(type, callback);
  • 参数type指的是为DOM对象绑定的事件类型,它是由on与事件名称组成的,如onclick。
  • 参数callback表示事件的处理程序。
// 标准浏览器
DOM对象.addEventListener(type, callback, [capture]);
  • 参数type指的是DOM对象绑定的事件类型,它是由事件名称设置的,如click。
  • 参数callback表示事件的处理程序。
  • 参数capture默认值为false,表示在冒泡阶段完成事件处理,将其设置为true时,表示在捕获阶段完成事件处理。

事件监听式的两种不同实现方式的区别

  • 实现的语法不同。
  • 事件处理程序的触发顺序也不相同,同一个对象的相同事件,早期版本IE浏览器的事件处理程序按照添加的顺序倒序执行。而标准浏览器的事件处理程序按照添加顺序正序执行。

事件监听的处理程序是一个有名的函数时,可移出事件监听。

  • DOM对象.detachEvent(type, callback); // 早期版本IE浏览器
  • DOM对象.removeEventListener(type, callback); // 标准浏览器

参数type值的设置要与添加事件监听的事件类型相同,参数callback表示事件处理程序的名称,即函数名。

2 事件对象

2.1 获取事件对象

当发生事件时,都会产生一个事件对象event。

这个对象中包含着所有与事件相关的信息,包括发生事件的DOM元素、事件的类型以及其他与特定事件相关的信息。

比如,因鼠标移动发生事件时,事件对象中就会包括鼠标位置(横纵坐标)等相关的信息;

获取事件对象的方式

  • 早期IE浏览器(IE6~8):window.event
  • 标准浏览器:会将一个event对象直接传入到事件处理程序中。
var event = e || window.event; 

2.2 常用属性和方法

在事件发生后,事件对象event中不仅包含着与特定事件相关的信息,还会包含一些所有事件都有的属性和方法。

分类属性/方法描述
公有的type返回当前事件的类型,如click
标准浏览器事件对象target返回触发此事件的元素(事件的目标节点)
标准浏览器事件对象currentTarget返回其事件监听器触发该事件的元素
标准浏览器事件对象bubbles表示事件是否是冒泡事件类型
标准浏览器事件对象cancelable表示事件是否取消默认动作
标准浏览器事件对象eventPhase返回事件传播的当前阶段。1表示捕获阶段,2表示处于目标阶段,3表示冒泡阶段
标准浏览器事件对象stopPropagation()阻止事件冒泡
标准浏览器事件对象preventDefault()阻止默认行为
早期版本IE浏览器事件对象srcElement返回触发此事件的元素(事件的目标节点)
早期版本IE浏览器事件对象cancelBubble阻止事件冒泡,默认为false表示允许,设置true表示阻止
早期版本IE浏览器事件对象returnValue阻止默认行为,默认为true表示允许,设置false表示阻止
var btn = document.getElementById('btn');
btn.onclick = function(e) {var obj = event.target || window.event.srcElement;console.log(obj.nodeName); console.log(obj.id);console.log(obj.className); console.log(obj.innerText); 
};
// 事件冒泡
red.onclick = function() { console.log('red'); };
green.onclick = function() { console.log('green'); };
yellow.onclick = function() { console.log('yellow'); };
// 阻止事件冒泡
if (window.event) {	// 早期IE浏览器window.event.cancelBubble = true;
} else {			// 标准浏览器e.stopPropagation();
}

HTML中有些元素标签拥有一些特殊的行为。例如,单击 <a> 标签后,会自动跳转到href属性指定的URL链接;单击表单的submit按钮后,会自动将表单数据提交到指定的服务器端页面处理。因此,我们把标签具有的这种行为称为默认行为。

<a id="test" href="http://www.example.com">默认链接</a>
<script>document.getElementById('test').onclick = function(e) {if (window.event) { // 早期版本IE浏览器window.event.returnValue = false;} else { //标准浏览器e.preventDefault();}};
</script>

2.3 练习作业

  • 缓动的小球
    • 动画特效:是JavaScript的常见功能之一。
    • 缓动的实现原理:通过定时器连续的修改当前DOM元素的某个样式值,达到一个动态的特效。
    • 缓动动画公式:
      • 计算每次缓动的步长 step = ( target - leader ) / 10
      • 计算下次的起始点 leader = leader + step
      • target 表示目标点。
      • leader 表示起始点。
      • step 表示从起始点到目标点每次缓动的步长。而缓动特效在实现时,随着距离 target 越来越近,step 步长值逐渐变小,从而达到非常逼真的缓动效果。
    • 利用 <div> 设计小球,并用 CSS 设置小球的定位。
    • 为小球绑定单击事件,在处理函数中调用自定义的 animate() 实现小球的缓动。
    • 编写 animate() 动画函数,在函数中利用定时器,根据缓动公式完成缓动动画。

3 事件分类

3.1 页面事件

HTML页面是按照什么样的顺序进行加载的?

页面的加载是按照代码的编写顺序,从上到下依次执行的。

会出现的问题:若在页面还未加载完成的情况下,就使用JavaScript操作DOM元素,会出现语法错误。

<!-- 页面加载顺序的问题-->
<script>document.getElementById('demo').onclick = function () {console.log('单击');};
</script>
<div id="demo"></div>

解决办法:页面事件可以改变JavaScript代码的执行时机。

  • load事件:用于body内所有标签都加载完成后才触发,又因其无需考虑页面加载顺序的问题,常常在开发具体功能时添加。
  • unload事件:用于页面关闭时触发,经常用于清除引用避免内存泄漏时使用。
window.onload = function() {// JavaScript代码
};

3.2 焦点事件

在Web开发中,焦点事件多用于表单验证功能,是最常用的事件之一。

例如,文本框获取焦点改变文本框的样式,文本框失去焦点时验证文本框内输入的数据等。

事件名称事件触发时机
focus当获得焦点时触发(不会冒泡)
blur当失去焦点时触发(不会冒泡)

3.3 鼠标事件

鼠标事件是Web开发中最常用的一类事件。

例如,鼠标滑过时,切换Tab栏显示的内容;利用鼠标拖拽曳状态框,调整它的显示位置等,这些常见的网页效果都会用到鼠标事件。

事件名称事件触发时机
click当按下并释放任意鼠标按键时触发
dblclick当鼠标双击时触发
mouseover当鼠标进入时触发
mouseout当鼠标离开时触发
change当内容发生改变时触发,一般多用于 <select> 对象
mousedown当按下任意鼠标按键时触发
mouseup当释放任意鼠标按键时触发
mousemove在元素内当鼠标移动时持续触发

在项目开发中还经常涉及一些常用的鼠标属性,用来获取当前鼠标的位置信息。

位置属性(只读)描述
clientX鼠标指针位于浏览器页面当前窗口可视区的水平坐标(X轴坐标)
clientY鼠标指针位于浏览器页面当前窗口可视区的垂直坐标(Y轴坐标)
pageX鼠标指针位于文档的水平坐标(X轴坐标),IE6~8不兼容
pageY鼠标指针位于文档的垂直坐标(Y轴坐标),IE6~8不兼容
screenX鼠标指针位于屏幕的水平坐标(X轴坐标)
screenY鼠标指针位于屏幕的垂直坐标(Y轴坐标)

IE68浏览器中不兼容pageX和pageY属性。因此,项目开发时需要对IE68浏览器进行兼容处理。

var pageX = event.pageX || event.clientX + document.documentElement.scrollLeft;
var pageY = event.pageY || event.clientY + document.documentElement.scrollTop;

鼠标在文档中的坐标等于鼠标在当前窗口中的坐标加上滚动条卷去的文本长度。

3.4 作业练习

  • 鼠标拖曳特效

    • 盒子的位置(left和top值)= 鼠标的位置(left和top值)- 鼠标按下时与盒子之间的距离(left和top值)。
    • 编写HTML,设计弹框用于实现拖拽特效。
    • 为拖拽条添加mousedown事件及其处理程序。
    • 处理鼠标移动事件,实现鼠标的拖拽的特效。
    • 处理释放鼠标按键的事件,实现鼠标按钮松开后,弹框不再移动。

3.5 键盘事件

键盘事件是指用户在使用键盘时触发的事件。

例如,用户按Esc键关闭打开的状态栏,按Enter键直接完成光标的上下切换等。

事件名称事件触发时机
keypress键盘按键(Shift、Fn、CapsLock等非字符键除外)按下时触发
keydown键盘按键按下时触发
keyup键盘按键弹起时触发

keypress事件保存的按键值是ASCII码,keydown和keyup事件保存的按键值是虚拟键码。

3.6 表单事件

表单事件指的是对Web表单操作时发生的事件。

例如,表单提交前对表单的验证,表单重置时的确认操作等。JavaScript提供了相关的表单事件。

事件名称事件触发时机
submit当表单提交时触发
reset当表单重置时触发

4 练习作业

  • 图片放大特效
    • 准备两张相同的图片,小图和大图。
    • 小图显示在商品的展示区域。
    • 大图用于鼠标在小图上移动时,按比例的显示大图中的对应区域。
    • 编写HTML页面,展示小图、隐藏鼠标的遮罩及大图。
    • 当鼠标在小图上移动时,显示鼠标的遮罩和大图。
    • 当鼠标移动时,让遮罩跟着在小图中进行移动。
    • 限定遮罩在小图中的可移动范围。
    • 根据遮罩在小图中的覆盖范围,按比例的显示大图。

的确认操作等。JavaScript提供了相关的表单事件。

事件名称事件触发时机
submit当表单提交时触发
reset当表单重置时触发

4 练习作业

  • 图片放大特效
    • 准备两张相同的图片,小图和大图。
    • 小图显示在商品的展示区域。
    • 大图用于鼠标在小图上移动时,按比例的显示大图中的对应区域。
    • 编写HTML页面,展示小图、隐藏鼠标的遮罩及大图。
    • 当鼠标在小图上移动时,显示鼠标的遮罩和大图。
    • 当鼠标移动时,让遮罩跟着在小图中进行移动。
    • 限定遮罩在小图中的可移动范围。
    • 根据遮罩在小图中的覆盖范围,按比例的显示大图。

相关文章:

前端架构师之11_JavaScript事件

1 事件处理 1.1 事件概述 在学习事件前&#xff0c;有几个重要的概念需要了解&#xff1a; 事件事件处理程序事件驱动式事件流 事件 可被理解为是JavaScript侦测到的行为。 这些行为指的就是页面的加载、鼠标单击页面、鼠标滑过某个区域等。 事件处理程序 指的就是Java…...

文本过滤工具:grep

什么是grep&#xff1f; grep是一个命令行文本搜索工具&#xff0c;它的名称来源于"Global Regular Expression Print"&#xff08;全局正则表达式打印&#xff09;。它的主要功能是在文本文件中查找特定模式或字符串&#xff0c;并将匹配的行打印到终端或输出到文件…...

【Linux】生产者和消费者模型

生产者和消费者概念基于BlockingQueue的生产者消费者模型全部代码 生产者和消费者概念 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。 生产者和消费者彼此之间不直接通讯&#xff0c;而通过这个容器来通讯&#xff0c;所以生产者生产完数据之后不用等待…...

开发APP的费用是多少

开发一款APP的费用可以因多种因素而异&#xff0c;包括项目的规模、功能、复杂性、技术选择、地理位置等。北京是中国的大城市&#xff0c;APP开发的费用也会受到北京的物价水平和市场竞争的影响。以下是一些可以影响APP开发费用的因素&#xff0c;希望对大家有所帮助。北京木奇…...

start()方法源码分析

当我们创建好一个线程之后&#xff0c;可以调用.start()方法进行启动&#xff0c;start()方法的内部其实是调用本地的start0()方法&#xff0c; 其实Thread.java这个类中的方法在底层的Thread.c文件中都是一一对应的&#xff0c;在Thread.c中start0方法的底层调用了jvm.cpp文件…...

VUE_history模式下页面404错误

uniapp 的history 把#去掉了&#xff0c;但是当刷新页面的时候出现404错误 解决方案&#xff1a;需要服务端支持 如果 URL 匹配不到任何静态资源&#xff0c;则应该返回同一个 index.html 页面 Apache <IfModule mod_rewrite.c>RewriteEngine OnRewriteBase /RewriteRu…...

现代数据架构-湖仓一体

当前的数据架构已经从数据库、数据仓库&#xff0c;发展到了数据湖、湖仓一体架构&#xff0c;本篇文章从头梳理了一下数据行业发展的脉络。 上世纪&#xff0c;最早出现了关系型数据库&#xff0c;也就是DBMS&#xff0c;有商业的Oracle、 IBM的DB2、Sybase、Informix、 微软…...

最新AI写作系统ChatGPT源码/支持GPT4.0+GPT联网提问/支持ai绘画Midjourney+Prompt应用+MJ以图生图+思维导图生成

一、智能创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&…...

Python机器学习实战-特征重要性分析方法(5):递归特征消除(附源码和实现效果)

实现功能 递归地删除特征并查看它如何影响模型性能。删除时会导致更大下降的特征更重要。 实现代码 from sklearn.ensemble import RandomForestClassifier from sklearn.feature_selection import RFE import pandas as pd from sklearn.datasets import load_breast_cance…...

如何快速走出网站沙盒期(关于优化百度SEO提升排名)

网站沙盒期是指新建立的网站在百度搜索引擎中无法获得好的排名&#xff0c;甚至被完全忽略的现象。这个现象往往发生在新建立的网站上&#xff0c;因为百度需要时间来评估网站的质量和内容。蘑菇号www.mooogu.cn 为了快速走出网站沙盒期&#xff0c;需要优化百度SEO。以下是5个…...

ATA-8000系列射频功率放大器——应用场景介绍

ATA-8000系列是一款射频功率放大器。其P1dB输出功率500W&#xff0c;饱和输出功率最大1000W。增益数控可调&#xff0c;一键保存设置&#xff0c;提供了方便简洁的操作选择&#xff0c;可与主流的信号发生器配套使用&#xff0c;实现射频信号的放大。 图&#xff1a;ATA-8000系…...

2009-2018年各省涉农贷款数据(wind)

2009-2018年各省涉农贷款数据&#xff08;wind&#xff09; 1、时间&#xff1a;:209-2018年 2、范围&#xff1a;31省 3、来源&#xff1a;wind 4、指标&#xff1a;涉农贷款 指标解释 &#xff1a;在涉农贷款的分类上&#xff0c;按照城乡地域将涉农贷款分为农村贷款和城…...

window.print()打印及出现的问题

<template><transition name"el-zoom-in-center"><div class"JNPF-preview-main"><div class"JNPF-common-page-header"><el-page-header back"goBack" :content"打印通知书" /><div clas…...

Fedora Linux 39 Beta 预估 10 月底发布正式版

Fedora 39 Beta 镜像于今天发布&#xff0c;用户可以根据自己的使用偏好&#xff0c;下载 KDE Plasma&#xff0c;Xfce 和 Cinnamon 等不同桌面环境版本&#xff0c;正式版预估将于 10 月底发布 Fedora 39 Beta 版本主要更新了 DNF 软件包管理器&#xff0c;并优化了 Anaconda …...

【zookeeper】基于Linux环境安装zookeeper集群

前提&#xff0c;需要有几台linux机器&#xff0c;我们可以准备好诸如finalshell来连接linux并且上传文件&#xff1b; 其次Linux需要安装上ssh&#xff0c;并且在/etc/hosts文件中写好其他几台机器的名字和Ip 127.0.0.1 localhost localhost.localdomain localhost4 localh…...

什么是IoT数字孪生?

数字孪生是资产或系统的实时虚拟模型&#xff0c;它使用来自连接的物联网传感器的数据来创建数字表示。数字孪生允许您从任何地方实时监控设备、资产或流程。数字孪生用于多种目的&#xff0c;例如分析性能、监控问题或在实施之前运行测试。从物联网数字孪生中获得的见解使用户…...

俄罗斯四大平台速卖通、Joom、Ozon 和 UMKA中国卖家如何脱颖而出!

随着全球化的不断推进&#xff0c;越来越多的中国卖家将目光投向了俄罗斯这个广阔的市场。在众多的跨境电商平台中&#xff0c;速卖通、Joom、Ozon 和 UMKA 无疑是最受关注的四个平台。本文将从卖家的角度&#xff0c;详细分析这四大平台的特点和优势&#xff0c;帮助找到最…...

destoon 调用第三方api接口

调用企查查企业工商信息接口为例&#xff1a; 在 \api\extend.func.php 文件下 注意&#xff1a;有注释内容可能接口无法访问 function select_list($k){$query_data array(key>,keyword>$k);$url "https://api.qichacha.com/ECIV4/GetBasicDetailsByName?&q…...

js中的类型转换

原文地址 JavaScript 中有两种类型转换&#xff1a;隐式类型转换&#xff08;强制类型转换&#xff09;和显式类型转换。类型转换是将一个数据类型的值转换为另一个数据类型的值的过程。 隐式类型转换&#xff08;强制类型转换&#xff09;&#xff1a; 隐式类型转换是 Java…...

Oracle物化视图(Materialized View)

与Oracle普通视图仅存储查询定义不同&#xff0c;物化视图&#xff08;Materialized View&#xff09;会将查询结果"物化"并保存下来&#xff0c;这意味着物化视图会消耗存储空间&#xff0c;物化的数据需要一定的刷新策略才能和基表同步&#xff0c;在使用和管理上比…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

第八部分:阶段项目 6:构建 React 前端应用

现在&#xff0c;是时候将你学到的 React 基础知识付诸实践&#xff0c;构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段&#xff0c;你可以先使用模拟数据&#xff0c;或者如果你的后端 API&#xff08;阶段项目 5&#xff09;已经搭建好&#xff0c;可以直接连…...

OCR MLLM Evaluation

为什么需要评测体系&#xff1f;——背景与矛盾 ​​ 能干的事&#xff1a;​​ 看清楚发票、身份证上的字&#xff08;准确率>90%&#xff09;&#xff0c;速度飞快&#xff08;眨眼间完成&#xff09;。​​干不了的事&#xff1a;​​ 碰到复杂表格&#xff08;合并单元…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...

React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?

系列回顾&#xff1a; 在上一篇《React核心概念&#xff1a;State是什么&#xff1f;》中&#xff0c;我们学习了如何使用useState让一个组件拥有自己的内部数据&#xff08;State&#xff09;&#xff0c;并通过一个计数器案例&#xff0c;实现了组件的自我更新。这很棒&#…...

Yii2项目自动向GitLab上报Bug

Yii2 项目自动上报Bug 原理 yii2在程序报错时, 会执行指定action, 通过重写ErrorAction, 实现Bug自动提交至GitLab的issue 步骤 配置SiteController中的actions方法 public function actions(){return [error > [class > app\helpers\web\ErrorAction,],];}重写Error…...

基于Python的气象数据分析及可视化研究

目录 一.&#x1f981;前言二.&#x1f981;开源代码与组件使用情况说明三.&#x1f981;核心功能1. ✅算法设计2. ✅PyEcharts库3. ✅Flask框架4. ✅爬虫5. ✅部署项目 四.&#x1f981;演示效果1. 管理员模块1.1 用户管理 2. 用户模块2.1 登录系统2.2 查看实时数据2.3 查看天…...