JavaScript【6】事件
1.概述:
-
在 JavaScript 中,事件(Event)是浏览器或 DOM(文档对象模型)与 JavaScript 代码之间交互的一种机制。
-
它代表了在浏览器环境中发生的特定行为或者动作,比如用户点击鼠标、敲击键盘、页面加载完成、元素获得或失去焦点等情况。这些事件可以被 JavaScript 代码捕获并进行相应的处理。
2.表单事件:
1.获取/失去焦点:onfocus/onblur
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form action="#" method="post" id="myForm" enctype="application/x-www-form-urlencoded"><input type="text" id="text"/>
<!-- <button type="submit">提交</button>--><input type="submit"/>
</form><script>let text = document.getElementById("text");text.onblur = function () {//失去焦点时this.style.backgroundColor = "green";}text.onfocus = function () {//获得焦点时this.style.backgroundColor = "red";}
</script></body>
</html>
默认输入框背景无填充色,只有触发下面事件才会将背景填充为对应颜色
点击输入框,此时获得焦点,触发获得焦点事件,将输入框背景改为红色
点击输入框以外的区域,此时失去焦点,触发失去焦点事件,将输入框背景改为绿色
2.节点内容改变:onchange
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form action="#" method="post" id="myForm" enctype="application/x-www-form-urlencoded"><input type="text" id="text"/>
<!-- <button type="submit">提交</button>--><input type="submit"/>
</form><script>let text = document.getElementById("text");text.onchange = function () {//节点的内容改变时console.log(this.value)}
</script></body>
</html>
当输入1时,控制台输入1;
当删除输入框中的1后再重新输入1,发现控制台没有再次输出,说明此时没有触发该事件;
当输入框内的内容发送改变时,会再次触发该事件,并将输入值打印到控制台;
3.输入框有内容输入时:oninput
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form action="#" method="post" id="myForm" enctype="application/x-www-form-urlencoded"><input type="text" id="text"/>
<!-- <button type="submit">提交</button>--><input type="submit"/>
</form><script>let text = document.getElementById("text");text.oninput = function () {//在用户输入时执行console.log(this.value)}
</script></body>
</html>
没有内容输入时,不触发该事件;
输入内容时,会将输入内容打印到控制台
当删除输入框内容时,会触发该事件,控制台打印空数据
当再次输入1时,再次触发该事件,控制台再次打印该数据
4.选取元素时:onselect
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form action="#" method="post" id="myForm" enctype="application/x-www-form-urlencoded"><input type="text" id="text"/>
<!-- <button type="submit">提交</button>--><input type="submit"/>
</form><script>let text = document.getElementById("text");text.onselect = function () {console.log("选取元素时执行",this.value)}</script></body>
</html>
输入框输入内容时,不触发该事件
当选取输入内容时,触发该事件,将输入内容打印到控制台
5.提交时:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form action="#" method="post" id="myForm" enctype="application/x-www-form-urlencoded"><input type="text" id="text"/><button type="submit">提交</button><input type="submit"/>
</form><script>let myForm = document.getElementById("myForm");myForm.onsubmit = function () {// if(text.value.....){//.....// }//当返回值为fasle 阻止提交// true 允许提交return false;}*/</script></body>
</html>
此时返回值为false,点击提交按钮时不会触发提交事件,该表单不会被提交
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form action="#" method="post" id="myForm" enctype="application/x-www-form-urlencoded"><input type="text" id="text"/><button type="submit">提交</button><input type="submit"/>
</form><script>let myForm = document.getElementById("myForm");myForm.onsubmit = function () {// if(text.value.....){//.....// }//当返回值为fasle 阻止提交// true 允许提交return true;}</script></body>
</html>
当返回值为true时,点击提交按钮会触发该事件,该表单会被提交(#表示提交到当前页面)
3.窗口事件:
1.获得/失去焦点时:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<img src="./img/QQ20241118-114112.png"/>
<script>window.onblur = function () {console.log('窗口失去了焦点')}window.onfocus = function () {console.log('窗口获得了焦点')}</script></body>
</html>
此时刚打开页面,不触发事件,所以控制台无输出
当点击左侧窗口区域时,触发获得焦点事件,控制台打印对应内容
当再次点击窗口外区域时,触发失去焦点事件,控制台再次打印对应内容
2.页面加载完成时:onload
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<img src="./img/QQ20241118-114112.png"/>
<script>window.onload= function () {//当页面加载完成后执行console.log("页面加载完成")}</script></body>
</html>
当使用低网速加载测试时,可以发现,不是一打开页面就会触发该事件,而是只有当整个页面加载出来后,才会触发该事件;
3.窗口大小改变时:onresize
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><script>window.onresize= function () {console.log("页面大小正在改变")}</script></body>
</html>
页面加载完成时,未触发事件
此时将窗口区域面积减小时,触发了该事件,并在控制台打印对应信息
4.键盘事件:
1.键盘按下时触发:onkeydown
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!--<input type="text" id="text"/>-->
<script>let text = document.getElementById("text");//键盘按下时执行text.onkeydown = function (event) {// 解决兼容问题event = event || window.event;// key 按键//console.log("按下的键:", event.keyCode)console.log("按下的键:",event.key)}</script></body>
</html>
只要在键盘上按下按键,每按一次就会触发一次该事件,(如果长按则会重复触发),并将按键输出到控制台;
2.键盘弹起时触发:onkeyup
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!--<input type="text" id="text"/>-->
<script>let text = document.getElementById("text");text.onkeyup = function (event) {console.log("按键弹起时:",event.key)}</script></body>
</html>
当长按1时,不会触发该事件,只有当松开时,会触发1次该事件
3.按下弹起时触发:onkeypress
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!--<input type="text" id="text"/>-->
<script>let text = document.getElementById("text");text.onkeypress = function (event) {console.log("按下弹起时:",event.key)}</script></body>
</html>
只有当按下并松开时才会触发该事件
4.案例:通过方向键控制色块移动
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<div id="box" style="width: 100px;height: 100px;background-color: red;position: absolute;"></div>
<script>let box = document.getElementById("box");document.onkeydown = function (event) {let speed = 10;switch (event.keyCode) {case 37:box.style.left = box.offsetLeft - speed + "px";break;case 39:box.style.left = box.offsetLeft + speed + "px";break;case 38:box.style.top = box.offsetTop - speed + "px";break;case 40:box.style.top = box.offsetTop + speed + "px";break;}}</script></body>
</html>
这是页面刚加载出来时色块的位置,此时我们可以通过方向键改变色块的位置
5.鼠标事件:
1.单击左键触发:onclick
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<div id="box" style="overflow: auto;width: 100px;height: 100px;background-color: pink;"></div>
<script>let box = document.getElementById("box");box.onclick = function () {console.log("单击事件触发");}</script>
</body>
</html>
在元素区域(色块)内,单机鼠标左键,触发该事件
2.双击触发:ondblclick
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<div id="box" style="overflow: auto;width: 100px;height: 100px;background-color: pink;"></div>
<script>let box = document.getElementById("box");box.ondblclick = function () {console.log("双击事件触发");}</script>
</body>
</html>
双击元素区域,触发该事件
3.鼠标任意按键按下或松开时触发:onmousedown/onmouseup
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<div id="box" style="overflow: auto;width: 100px;height: 100px;background-color: pink;"></div>
<script>let box = document.getElementById("box");box.onmousedown = function () {console.log("鼠标按钮按下时");}box.onmouseup = function () {console.log("鼠标按钮松开时");}</script>
</body>
</html>
在元素区域内按下或松开鼠标任意按键对会触发对应事件
4.鼠标指针移动时触发:onmousemove
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<div id="box" style="overflow: auto;width: 100px;height: 100px;background-color: pink;"></div>
<script>let box = document.getElementById("box");box.onmousemove = function () {console.log("鼠标指针移动时");}</script>
</body>
</html>
当鼠标指针在元素区域内移动时,就会重复触发该事件
5.鼠标指针移入或移出时触发:
不能阻止事件冒泡:onmouseover/onmouseout
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<div id="box" style="overflow: auto;width: 100px;height: 100px;background-color: pink;"></div>
<script>let box = document.getElementById("box");box.onmouseover = function () {// 不能阻止事件的冒泡console.log("鼠标指针移动到元素上时");}box.onmouseout = function () {// 不能阻止事件的冒泡console.log("鼠标指针移动出元素上时");}</script>
</body>
</html>
当指针移入元素区域或移出元素区域时,都会触发对应事件
可以阻止事件冒泡:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<div id="box" style="overflow: auto;width: 100px;height: 100px;background-color: pink;"></div>
<script>let box = document.getElementById("box");box.onmouseenter = function () {// 能阻止事件的冒泡console.log("鼠标指针移动到元素上时");}box.onmouseleave = function () {// 能阻止事件的冒泡console.log("鼠标指针移动出元素上时");}</script>
</body>
</html>
当指针移入元素区域或移出元素区域时,都会触发对应事件
6.鼠标滚轮滑动时触发:
1.有无内容都可触发(滑动滚轮):onmousewheel
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<div id="box" style="overflow: auto;width: 100px;height: 100px;background-color: pink;"></div>
<script>let box = document.getElementById("box");// 有没有内容都会触发/* box.onmousewheel = function () {console.log("鼠标的滚轮滚动时")}*/</script>
</body>
</html>
在元素区域内滑动鼠标滚轮,不管元素区域内有没有内容,都会触发该事件
2.必须有内容才会触发(滑动滚动条):
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<div id="box" style="overflow: auto;width: 100px;height: 100px;background-color: pink;"></div>
<script>let box = document.getElementById("box");//有内容才能触发box.onscroll = function () {console.log("滚动条滚动了")}</script>
</body>
</html>
此时元素区域内无内容,滑动鼠标滚轮不会触发该事件
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<div id="box" style="overflow: auto;width: 100px;height: 100px;background-color: pink;">我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容我是一段内容
</div>
<script>let box = document.getElementById("box");//有内容才能触发box.onscroll = function () {console.log("滚动条滚动了")}</script>
</body>
</html>
此时元素区域内有内容,当我们滑动鼠标滚轮时会重复触发该事件
6.事件冒泡:
1.概述:
事件冒泡 (Bubble):是指事件向上传导,当后代元素上的事件被触发时,其祖先元素的相同事件也会被触发;
2.示例:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style>#div1 {width: 200px;height: 200px;background-color: pink;}#div2 {width: 100px;height: 100px;background-color: coral;}</style>
</head>
<body>
<div id="div1">我是DIV1<div id="div2">我是DIV2</div>
</div>
<script>let div1 = document.getElementById("div1");let div2 = document.getElementById("div2");div1.onclick = function () {console.log("div1 的单击事件触发了")}div2.onclick = function () {console.log("div2 的单击事件触发了")}
</script>
</body>
</html>
在上面案例中,DIV2作为DIV1的子节点,当我们单击DIV2区域时,鼠标单击事件会向上传导到其父节点DIV1中,通过测试结果我们也可以看出当我们单击子节点div2时,不仅div2节点触发了该事件,其父节点div1节点也触发了该事件;
3.避免事件冒泡:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style>#div1 {width: 200px;height: 200px;background-color: pink;}#div2 {width: 100px;height: 100px;background-color: coral;}</style>
</head>
<body>
<div id="div1">我是DIV1<div id="div2">我是DIV2</div>
</div>
<script>let div1 = document.getElementById("div1");let div2 = document.getElementById("div2");div1.onclick = function () {console.log("div1 的单击事件触发了")}div2.onclick = function () {console.log("div2 的单击事件触发了")stopBubble();}//取消事件的冒泡function stopBubble(event) {//处理浏览器兼容性问题if (event && event.stopPropagation) {event.stopPropagation()} else {window.event.cancelBubble = true;}}
</script>
</body>
</html>
此时单击div2区域,该事件不会再传导到其父节点div1中;
相关文章:
JavaScript【6】事件
1.概述: 在 JavaScript 中,事件(Event)是浏览器或 DOM(文档对象模型)与 JavaScript 代码之间交互的一种机制。它代表了在浏览器环境中发生的特定行为或者动作,比如用户点击鼠标、敲击键盘、页面…...
Python训练打卡Day26
函数专题1:函数定义与参数 知识点回顾: 函数的定义变量作用域:局部变量和全局变量函数的参数类型:位置参数、默认参数、不定参数传递参数的手段:关键词参数传递参数的顺序:同时出现三种参数类型时 到目前为…...
通俗版解释CPU、核心、进程、线程、协程的定义及关系
通俗版解释(比喻法) 1. CPU 和核心 CPU 一个工厂(负责干活的总部)。核心 工厂里的车间(比如工厂有4个车间,就能同时处理4个任务)。 2. 进程 进程 一家独立运营的公司(比如一家…...
微积分基本规则及示例解析
微积分中的基本规则是构成微积分理论和应用的基石。以下是一些微积分中的基本规则,我将用简单的例子来解释它们,以便小学生也能理解。 1. **极限规则**: - 常数的极限:\(\lim_{x \to a} c c\) - 例如,\(\lim…...
Baklib知识中台构建企业智能服务新引擎
知识中台构建智能服务新范式 随着企业数字化转型进入深水区,传统知识管理模式的局限性日益显现——分散的文档系统、低效的信息检索以及割裂的业务场景,严重制约着组织效能的释放。在此背景下,Baklib提出的知识中台解决方案,通过…...
Python实例题:Python百行制作登陆系统
目录 Python实例题 题目 python-login-systemPython 百行登录系统脚本 代码解释 用户数据库: 注册功能: 登录功能: 主程序: 运行思路 注意事项 Python实例题 题目 Python百行制作登陆系统 python-login-systemPython…...
Java求职面试:从核心技术到大数据与AI的场景应用
面试场景: 在某互联网大厂的面试间,一位严肃的面试官正准备对面前的求职者谢飞机进行技术面试。谢飞机虽然有些紧张,但他相信凭借自己的机智和幽默能够顺利通过。 第一轮提问:核心语言与平台的基础问题 面试官:“谢…...
系统架构设计(六):面向对象设计
核心概念 概念含义说明对象(Object)现实世界事物的抽象表示,包含属性(状态)和方法(行为)类(Class)一类对象的抽象模板继承(Inheritance)子类继承…...
国内AWS CloudFront与S3私有桶集成指南:安全访问静态内容
在现代web应用架构中,将静态内容存储在Amazon S3中并通过CloudFront分发是一种常见且高效的做法。本指南将详细介绍如何创建私有S3桶,配置CloudFront分配,并使用Origin Access Identity (OAI)来确保安全访问。 步骤1:创建S3桶 首先,我们需要创建一个名为"b-static&…...
MATLAB进行深度学习网络训练
文章目录 前言环境配置一、环境部署二、数据准备三、训练配置与执行四、模型评估与优化五、高级技巧六、实战案例:COVID-19 肺部 CT 图像分类 前言 在 MATLAB 中进行深度学习网络训练主要分为数据准备、网络构建、训练配置和模型评估四个核心步骤。以下是详细教程&…...
jvm安全点(三)openjdk17 c++源码垃圾回收之安全点结束,唤醒线程
1. VMThread::inner_execute() - 触发安全点 cpp 复制 void VMThread::inner_execute(VM_Operation* op) { if (op->evaluate_at_safepoint()) { SafepointSynchronize::begin(); // 进入安全点,阻塞所有线程 // ...执行GC等操作... SafepointSynchronize::…...
局部放大maya的视图HUD文字大小的方法
一、问题描述: 有网友问:有办法局部放大maya的字体吗比如hud中currenttime打开之后画面右下角有个frame 想放大一下能做到吗? 在 Maya 中,可以通过自定义 HUD(Heads-Up Display)元素的字体大小来局部放大特…...
Vue.js 教学第三章:模板语法精讲,插值与 v-bind 指令
Vue.js 模板语法精讲:插值与 v-bind 指令 在 Vue.js 开发中,模板语法是构建动态用户界面的核心。本文将深入讲解两大基础模板语法:插值({{ }})和 v-bind 指令,通过大量实例帮助你掌握这些关键概念。 一、插值语法:双花括号的魔法 1.1 基础文本插值 双花括号是最简单的…...
系统架构设计师案例分析题——软件架构设计篇
重中之重,本题争取拿下25满分~ 目录 一.核心知识 1.什么是架构风格 2.RUP的9个核心工作流 3.企业应用集成方式 4.软件质量属性 5.SySML系统建模语言9种图 6.云计算架构 7.中间件 8.构件、连接件、软件重用 9.层次型架构的缺点 10.架构开发方法ADM 11.微…...
系统架构设计(十一):架构风格总结2
架构风格汇总 架构风格核心特点应用场景分层架构(Layered)将系统划分为多个层次,每层只依赖于下一层企业应用、MIS 系统、三层架构客户端-服务器(C/S)分为服务端与客户端,服务集中,客户端请求数…...
泛微对接金蝶云星空实战案例技术分享
前言 在企业信息化建设中,OA系统与ERP系统对接往往是一个复杂而关键的环节。OA系统通常具有高度的自定义性,其基础资料和单据可能与ERP系统存在字段不一致等问题。同时,OA系统涉及审批流程及流程发起方定义,增加了对接的复杂性。…...
Predict Podcast Listening Time-(回归+特征工程+xgb)
Predict Podcast Listening Time 题意: 给你没个播客的信息,让你预测观众的聆听时间。 数据处理: 1.构造新特征收听效率进行分组 2.对数据异常处理 3.对时间情绪等进行数值编码 4.求某特征值求多项式特征 5.生成特征组合 6.交叉验证并enc…...
Java并发编程的挑战:从理论到实战
在现代软件开发中,随着多核处理器的普及和系统性能要求的提高,并发编程已经成为Java开发者必须掌握的核心技能之一。然而,Java并发编程不仅仅是“创建多个线程”那么简单,它涉及到线程安全、资源竞争、死锁、通信机制、性能优化等多个复杂问题。 本文将围绕Java并发编程中…...
大麦(Hordeum vulgare)中 BAHD 超家族酰基转移酶-文献精读129
Systematic identification and expression profiles of the BAHD superfamily acyltransferases in barley (Hordeum vulgare) 系统鉴定与大麦(Hordeum vulgare)中 BAHD 超家族酰基转移酶的表达谱分析 摘要 BAHD 超家族酰基转移酶在植物中催化和调控次…...
信任的进阶:LEI与vLEI协同推进跨境支付体系变革
在全球经济版图加速重构的背景下,跨境支付体系正经历着前所未有的变革。2022年全球跨境支付规模突破150万亿美元,但平均交易成本仍高达6.04%,支付延迟超过2.7天。 这种低效率背后,隐藏着复杂的身份识别困境:超过40%的…...
当语言模型学会犯错和改正:搜索流(SoS)方法解析
引言 语言模型的能力日新月异,但它们在执行复杂规划任务时仍面临着明显的局限。这是因为大多数训练数据只展示了最终的"正确答案",而非解决问题的完整过程。想象一下,如果我们只能看到数学题的最终答案,而从不知道解题…...
Centos7.9同步外网yum源至内网
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum makecache yum repolist安装软件 yum install -y yum-utils createrepo # yum-utils包含re…...
OTA与boot loader
OTA指的是无线升级,通常用于更新设备的固件或软件,用户不用手动操作,非常方便。而bootloader是启动时加载操作系统的程序,负责硬件初始化和启动流程。 首先,OTA是如何通过bootloader工作的。OTA下载更新包后࿰…...
【目标检测】【Transformer】Swin Transformer
Swin Transformer: Hierarchical Vision Transformer using Shifted Windows Swin Transformer:基于移位窗口的分层视觉Transformer CVPR 2021 0.论文摘要 本文提出了一种新型视觉Transformer——Swin Transformer,其可作为计算机视觉领域的…...
Class类的详细说明
Class类的详细说明 Class 类是Java反射机制的核心,每个Java类或接口在JVM中都有一个对应的 Class 对象,用于表示该类的元数据(如类名、方法、字段、构造器等)。以下是其核心知识点: 1. 获取Class对象的三种方式 方式…...
电商项目-品牌管理微服务开发
一、功能分析 品牌管理微服务包括: (1)查询全部列表数据 (2)根据ID查询实体数据 (3)增加 (4)修改 (5)删除 (6)分页…...
【Linux网络编程】Socket编程:协议理论入门
前言 首先,在学习Socket编程之前,我们应该了解关于网络的一些基本概念,虽然说没有这些理论概念并不影响编程,但是以后工作时扯扯皮还是有用的。而且,一个开发网络程序的人不知道网络领域的一些基本概念,这说…...
Redis——缓存雪崩、击穿、穿透
缓存雪崩 大量缓存数据在同一时间过期或者Redis故障宕机时,若此时有大量请求,都会直接访问到数据库,导致数据库压力倍增甚至宕机。 大量数据同时过期解决方案: 1、均匀设置过期时间: 设置过期时间的时候可以追加一…...
基于QT和FFmpeg实现自己的视频播放器FFMediaPlayer(一)——项目总览
在音视频开发的学习过程中,开发一款视频播放器是FFmpeg进阶的最好实战方法。本文将基于 QT 和 FFmpeg 着手实现自定义视频播放器 FFMediaPlayer,作为系列文章的开篇,我们先来整体了解项目的设计思路、架构与配置。 一、软件设计五大原则 …...
panda机械臂的正逆运动学分析与仿真
文章目录 前言Panda机械臂的DH参数法建模正运动学逆运动学误差函数雅可比矩阵高斯-牛顿法(Gauss-Newton) 参考代码获取 前言 机械臂的位置运动学分析是机器人控制与轨迹规划的核心基础,其研究内容主要分为正运动学(Forward Kinem…...
网络切片:给用户体验做“私人定制”的秘密武器
网络切片:给用户体验做“私人定制”的秘密武器 咱们平时用手机上网、看视频、玩游戏,网络体验好不好,一半都靠运营商给的网络质量。可你有没有想过,为什么同一张网络,有的人能流畅刷视频,有的人却卡得要命?这其实就是网络资源分配的问题——不同应用、不同用户的需求差异…...
HarmonyOS NEXT~鸿蒙应用上架指南:HarmonyOS应用发布全流程解析
HarmonyOS NEXT~鸿蒙应用上架指南:HarmonyOS应用发布全流程解析 引言 随着华为鸿蒙操作系统(HarmonyOS)生态的快速发展,越来越多的开发者希望将自己的应用上架到鸿蒙应用市场。本文将详细介绍鸿蒙应用上架的全流程,帮助开发者顺…...
大模型在腰椎间盘突出症预测与治疗方案制定中的应用研究
目录 一、引言 1.1 研究背景 1.2 研究目的与意义 二、腰椎间盘突出症概述 2.1 定义与病因 2.2 症状与诊断方法 2.3 治疗方法概述 三、大模型技术原理与应用基础 3.1 大模型的基本原理 3.2 大模型在医疗领域的应用现状 3.3 用于腰椎间盘突出症预测的可行性分析 四、…...
【漫话机器学习系列】264.内距(又称四分位差)Interquartile Range
深入理解内距(Interquartile Range,IQR)——数据分析中的异常值利器 在日常的数据分析中,我们经常需要识别和处理异常值(Outliers),而内距(Interquartile Range,简称 IQR…...
高并发内存池|定长内存池的设计
二、定长内存池的设计 设计一个定长的内存池,这个内存池的定长在于,当剩余空间使用完毕后,总是开辟相同长度的新空间来使用。我们会使用到一个指针来切割划分大空间为小空间。大空间是内存池向系统申请的内存大小,而小空间是程序…...
STM32外设DA实战-DAC + DMA 输出正弦波
STM32外设DA实战-DAC DMA 输出正弦波模板 一,方法思路二,CubeMX配置三,代码实现1,生成正弦波查找表2,代码实现 一,方法思路 DAC 的一个常见应用是产生任意波形,比如平滑的正弦波。如果让 CPU …...
【React Fiber 架构详解】
React Fiber 架构详解 React Fiber 是 React 16 引入的核心协调算法重构,旨在解决传统同步渲染的性能瓶颈,提升用户体验。其核心在于将渲染任务拆解为可中断、优先级可控的增量单元,并通过链表数据结构优化调度流程。以下是其核心原理与工作机制的详细解析: 一、Fiber 的起…...
UDP的单播组播与广播
UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、基于IP的传输层协议,它提供了简单的、不可靠的数据报服务。UDP支持三种主要的通信方式:单播、组播和广播。 1. UDP 单播(Unicast)…...
上集:一个前端的血泪复仇记 —— 静态部署的胜利
“我只是想部署一个小项目,结果干翻了Spring Security、Next.js 和 AI —— 三个加起来至少值我两天命。” 话说有一天,我朋友搭了一个小系统,前后端分离,说大不大,说小不小。后端Spring Boot 3.4.5,前端Ne…...
网络流量分析 | Zeek(上)
介绍 Zeek 是一个开源且商用的网络监控和流量分析工具,许多的运维人员将 Zeek 作为网络安全监控器(Network Security Monitor,NSM),以支持可疑或恶意活动的调查。在安全领域之外,Zeek 还可被用于各种流量分…...
Unity3D仿星露谷物语开发44之收集农作物
1、目标 在土地中挖掘后,洒下种子后逐渐成长,然后使用篮子收集成熟后的农作物,工具栏中也会相应地增加该农作物。 2、修改CropStandard的参数 Assets -> Prefabs -> Crop下的CropStandard,修改其Box Collider 2D的Size(Y…...
AUTOSAR图解==>AUTOSAR_SRS_WatchdogDriver
AUTOSAR 看门狗驱动 (Watchdog Driver) 详解 AUTOSAR基础软件模块之看门狗驱动技术分析 目录 概述 1.1 看门狗驱动的作用 1.2 适用范围架构设计 2.1 总体架构 2.2 内部结构 2.3 接口设计功能实现 3.1 初始化和模式切换 3.2 状态管理 3.3 外部看门狗支持配置参数 4.1 核心配置项…...
Fidder基本操作
1.抓取https请求 Fidder默认不能抓取https请求,我们必须通过相应的设置才能抓取https请求 1.选择tools下的option 2.选择https选项,并且勾选下面的选项 3.点击Actions导出信任证书到桌面(expert root certificate to desktop) 4.在浏览器中添加对应的证…...
在线教育本地化分发:代理IP实现区域访问控制与内容适配
在在线教育本地化分发场景中,代理IP通过地理精准识别、动态内容适配与合规访问控制,成为突破区域限制、提升用户体验的核心技术工具。以下是基于2025年技术实践的解决方案: 一、区域访问控制的核心机制 地理IP库匹配与白名单策略 通过代理IP的…...
JAVA的常见API文档(上)
游戏打包 注意API文档中的方法不需要记忆!! 了解之后如果需要可以查询API文档 对Math的方法总结: 运用刚学的Math方法加快代码的运行效率 可以减少循环次数 找规律: 发现因子有规律: 必定一个大于平方根,…...
【数据结构】_二叉树
1.二叉树链式结构的实现 1.1 前置说明 在学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作。由于现在大家对二叉树结构掌握还不够深入,为了降低大家学习成本,此处手动快速创建一棵简单的二叉树&#x…...
ALIENTEK精英STM32F103开发板 实验0测试程序详解
#include "sys.h" #include "usart.h" #include "delay.h" //ALIENTEK精英STM32F103开发板 实验0 //新建工程 实验 //技术支持:www.openedv.com //广州市星翼电子科技有限公司 int main(void) { u8 t0; //见注释1 St…...
LeetCode 33. 搜索旋转排序数组:二分查找的边界艺术
文章目录 问题描述解决思路代码实现关键点解析1. 为什么用 nums[left] < nums[mid]?2. 示例分析案例 1:数组 [3, 1],目标值 1案例 2:数组 [5],目标值 5 边界条件处理1. 单元素数组2. 完全有序数组3. 严格递增与重复…...
Rust 学习笔记:关于 HashMap 的练习题
Rust 学习笔记:关于 HashMap 的练习题 Rust 学习笔记:关于 HashMap 的练习题以下代码能否通过编译?若能,输出是?以下代码能否通过编译?若能,输出是? Rust 学习笔记:关于 …...
(头歌作业)—6.1 葡萄酒评论分析报告(project)
第1关:葡萄酒评论分析报告——国家列表和平均分 任务描述 本关任务:编写程序,多维度分析葡萄酒数据。 相关知识 葡萄酒评论分析报告描述 winemag-data.csv 文件 winemag-data.csv 包含 编号、国家、描述、评分、价格、省份 等 6列 和12974…...