CSS3设计动画样式
CSS3动画包括过渡动画和关键帧动画,它们主要通过改变CSS属性值来模拟实现。我将详细介绍Transform、Transitions和Animations 3大功能模块,其中Transform实现对网页对象的变形操作,Transitions实现CSS属性过渡变化,Animations实现CSS样式分步式演示效果。
1、CSS3变形
2012年9月,W3C发布CSS3变形工作草案。这个草案包括CSS3 2D变形和CSS3 3D变形。CSS 2D Transform获得各主流浏览器的支持,CSS 3D Transform支持程度不是很完善。本节重点讲解2D变形,有关3D变形可以参考我的其它帖子。
1.1、设置原点
CSS变形的原点默认为对象的中心点(50% 50%),使用transform-origin属性可以重新设置新的变形原点。语法格式如下所示:
transform-origin:[ <percentage> | <length> | left | center① | right ] [ <percentage> | <length> | top | center② | bottom ]?
取值简单说明如下:
<percentage>
:用百分比指定坐标值,可以为负值。<length>
:用长度值指定坐标值,可以为负值。- left:指定原点的横坐标为left。
- center①:指定原点的横坐标为center。
- right:指定原点的横坐标为right。
- top:指定原点的纵坐标为top。
- center②:指定原点的纵坐标为center。
- bottom:指定原点的纵坐标为bottom。
【示例】通过重置变形原点,可以设计不同的变形效果。以图像的右上角为原点逆时针旋转图像45度:
<style type="text/css">img { /* 固定两幅图像相同大小和相同显示位置 */position: absolute;left: 20px;top: 10px;width: 170px;width: 250px;}img.bg { /* 设置第1幅图像作为参考 */opacity: 0.3;border: dashed 1px red;}img.change { /* 变形第2幅图像 */border: solid 1px red;transform-origin: top right; /* 以右上角为原点进行变形*/transform: rotate(-45deg); /* 逆时针旋转45度*/}</style><img class="bg" src="images/1.jpg"><img class="change" src="images/1.jpg">
比较效果如下图所示:
1.2、2D旋转
rotate()函数能够在2D空间内旋转对象,语法格式如下:
rotate(<angle>)
其中,参数angle表示角度值,取值单位可以是:度,如90deg(90度,一圈360度);梯度,如100 grad(相当于90度,360度等于400 grad);弧度,如1.57 rad(约等于90度,360度等于2π);圈,如0.25 turn(等于90度,360度等于1 turn)。
【示例】以上节示例为基础,按默认原点逆时针旋转图像45度:
img.change {border: solid 1px red;transform: rotate(-45deg);}
效果如下图所示:
1.3、2D缩放
scale()函数能够缩放对象大小,语法格式如下:
scale(<number>[, <number>])
该函数包含两个参数值,分别用来定义宽和高的缩放比例。取值简单说明如下:
- 如果取值为正数,则基于指定的宽度和高度将放大或缩小对象。
- 如果取值为负数,则不会缩小元素,而是翻转元素(如文字被反转),然后再缩放元素。
- 如果取值为小于1的小数(如0.5)可以缩小元素。
- 如果第二个参数省略,则第二个参数等于第一个参数值。
【示例】继续以上节示例为基础,按默认原点把图像缩小1/2:
img.change {border: solid 1px red;transform: scale(0.5);}
1.4、2D平移
translate()函数能够平移对象的位置,语法格式如下:
translate(<translation-value>[, <translation-value>])
该函数包含两个参数值,分别用来定义对象在x轴和y轴相对于原点的偏移距离。如果省略参数,则默认值为0。如果取负值,则表示反向偏移,参考原点保持不变。
【示例】设计向右下角方向平移图像,其中x轴偏移150px,y轴偏移50px:
img.change {border: solid 1px red;transform: translate(150px, 50px);}
1.5、2D倾斜
skew()函数能够倾斜显示对象,语法格式如下:
skew(<angle> [, <angle>])
该函数包含两个参数值,分别用来定义对象在x轴和y轴倾斜的角度。如果省略参数,则默认值为0。与rotate()函数不同,rotate()函数只是旋转对象的角度,而不会改变对象的形状;skew()函数会改变对象的形状。
【示例】使用skew()函数变形图像,x轴倾斜30度,y轴倾斜20度:
img.change {border: solid 1px red;transform: skew(30deg, 20deg);}
效果如下图所示:
1.6、2D矩阵
matrix()是一个矩阵函数,它可以同时实现缩放、旋转、平移和倾斜操作,语法格式如下:
matrix(<number>, <number>, <number>, <number>, <number>, <number>)
该函数包含6个值,具体说明如下:
- 第1个参数控制x轴缩放。
- 第2个参数控制x轴倾斜。
- 第3个参数控制y轴倾斜。
- 第4个参数控制y轴缩放。
- 第5个参数控制x轴平移。
- 第6个参数控制y轴平移。
【示例】使用matrix()函数模拟:
img.change {border: solid 1px red;transform: matrix(1, 0.6, 0.2, 1, 0, 0);}
提示:多个变形函数可以在一个声明中同时定义。例如:
div {transform: translate(80, 80);transform: rotate(45deg);transform: scale(1.5, 1.5);}
针对上面样式,可以简化为:
div { transform: translate(80, 80) rotate(45deg) scale(1.5, 1.5);}
2、过渡动画
2013年2月,W3C发布CSS Transitions工作草案,这个草案描述了CSS过渡动画的基本实现方法和属性,目前获得所有浏览器的支持。
2.1、设置过渡属性
transition-property属性定义过渡动画的CSS属性名称,基本语法如下所示:
transition-property:none | all | [ <IDENT> ] [ ‘,’ <IDENT> ]*;
取值简单说明如下:
- none:表示没有元素。
- all:默认值,表示针对所有元素,包括:before和:after伪元素。
- IDENT:指定CSS属性列表。几乎所有色彩、大小或位置等相关的CSS属性,包括许多新添加的CSS3属性都可以应用过渡,如CSS3变换中的放大、缩小、旋转、斜切、渐变等。
【示例】指定动画的属性为背景颜色。这样当鼠标经过盒子时,会自动从红色背景过渡到蓝色背景:
<style type="text/css">div {margin: 10px auto; height: 80px;background: red;border-radius: 12px;box-shadow: 2px 2px 2px #999;}div:hover {background-color: blue;/*指定动画过渡的CSS属性*/transition-property: background-color;}</style><div></div>
2.2、设置过渡时间
transition-duration属性定义转换动画的时间长度,基本语法如下所示:
transition-duration:<time> [, <time>]*;
其中,初始值为0,适用于所有元素,以及:before和:after伪元素。在默认情况下,动画过渡时间为0 s,当指定元素动画时,会看不到过渡的过程,而直接看到结果。
【示例】以上节示例为例,设置动画过渡时间为2 s,当鼠标移过对象时,会看到背景色从红色逐渐过渡到蓝色:
div:hover {background-color: blue;/*指定动画过渡的CSS属性*/transition-property: background-color;/*指定动画过渡的时间*/transition-duration:2s;}
2.3、设置延迟过渡时间
transition-delay属性定义开启过渡动画的延迟时间,基本语法如下所示:
transition-delay:<time> [, <time>]*;
其中,初始值为0,适用于所有元素,以及:before和:after伪元素。设置时间可以为正整数、负整数和零。非零的时候必须设置单位是s(秒)或者ms(毫秒);为负数的时候,过渡的动作会从该时间点开始显示,之前的动作被截断;为正数的时候,过渡的动作会延迟触发。
【示例】继续以上节示例为基础进行介绍,设置过渡动画推迟2s后执行,则当鼠标移过对象时,会看不到任何变化,过了2 s之后,才发现背景色从红色逐渐过渡到蓝色。
div:hover {background-color: blue;/*指定动画过渡的CSS属性*/transition-property: background-color;/*指定动画过渡的时间*/transition-duration: 2s;/*指定动画延迟触发 */transition-delay: 2s;}
2.4、设置过渡动画类型
transition-timing-function属性定义过渡动画的类型,基本语法如下所示:
transition-timing-function:ease | linear | ease-in | ease-out | ease-in-out | cubicbezier(<number>, <number>, <number>, <number>)
[, ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(<number>, <number>,<number>, <number>)]*
属性初始值为ease,取值简单说明如下:
- ease:平滑过渡,等同于cubic-bezier(0.25, 0.1, 0.25, 1.0)函数,即立方贝塞尔。
- linear:线性过渡,等同于cubic-bezier(0.0, 0.0, 1.0, 1.0)函数。
- ease-in:由慢到快,等同于cubic-bezier(0.42, 0, 1.0, 1.0)函数。
- ease-out:由快到慢,等同于cubic-bezier(0, 0, 0.58, 1.0)函数。
- ease-in-out:由慢到快再到慢,等同于cubic-bezier(0.42,0, 0.58, 1.0)函数。
- cubic-bezier:特殊的立方贝塞尔曲线效果。
【示例】继续以上节示例为基础进行介绍,设置过渡类型为线性效果,代码如下所示:
div:hover {background-color: blue;/*指定动画过渡的CSS属性*/transition-property: background-color;/*指定动画过渡的时间*/transition-duration: 10s;/*指定动画过渡为线性效果 */transition-timing-function: linear;}
2.5、设置过渡触发动作
CSS3过渡动画一般通过动态伪类触发,如下表所示:
也可以通过JavaScript事件触发,包括click、focus、mousemove、mouseover、mouseout等。
1、:hover
最常用的过渡触发方式是使用:hover伪类。
【示例1】设计当鼠标经过div元素时,该元素的背景颜色会在经过1 s的初始延迟后,于2 s内动态地从绿色变为蓝色。
<style type="text/css">div {margin: 10px auto;height: 80px;border-radius: 12px;box-shadow: 2px 2px 2px #999;background-color: red;transition: background-color 2s ease-in 1s;}div:hover { background-color: blue}</style><div></div>
2、:active
:active伪类表示用户单击某个元素并按住鼠标按钮时显示的状态。
【示例2】设计当用户单击div元素时,该元素被激活,这时会触发动画,高度属性从200px过渡到400px。如果按住该元素,保持活动状态,则div元素始终显示400px高度,松开鼠标之后,又会恢复到原来的高度:
<style type="text/css">div {margin: 10px auto;border-radius: 12px;box-shadow: 2px 2px 2px #999;background-color: #8AF435;height: 200px;transition: width 2s ease-in;}div:active {height: 400px;}</style><div></div>
3、: focus
:focus伪类通常会在表单对象接收键盘响应时出现。
【示例3】当输入框获取焦点时,输入框的背景色逐步高亮显示,如下图所示:
<style type="text/css">label {display: block;margin: 6px 2px;}input[type="text"], input[type="password"] {padding: 4px;border: solid 1px #ddd;transition: background-color 1s ease-in;}input:focus { background-color: #9FFC54;}</style><form id=fm-form action="" method=post><fieldset><legend>用户登录</legend><label for="name">姓名<input type="text" id="name" name="name" ></label><label for="pass">密码<input type="password" id="pass" name="pass" ></label></fieldset></form>
提示:把:hover伪类与:focus配合使用,能够丰富鼠标用户和键盘用户的体验。
4、:checked
:checked伪类在发生选中状况时触发过渡,取消选中则恢复原来的状态。
【示例4】设计当复选框被选中时缓慢缩进2个字符:
<style type="text/css">label.name {display: block;margin: 6px 2px;}input[type="text"], input[type="password"] {padding: 4px;border: solid 1px #ddd;}input[type="checkbox"] { transition: margin 1s ease;}input[type="checkbox"]:checked { margin-left: 2em;}</style><form id=fm-form action="" method=post><fieldset><legend>用户登录</legend><label class="name" for="name">姓名<input type="text" id="name" name="name" ></label><p>技术专长<br><label><input type="checkbox" name="web" value="html" id="web_0">HTML</label><br><label><input type="checkbox" name="web" value="css" id="web_1">CSS</label><br><label><input type="checkbox" name="web" value="javascript" id="web_2">JavaScript</label><br></p></fieldset></form>
演示效果:
5、媒体查询
触发元素状态变化的另一种方法是使用CSS3媒体查询。
【示例5】设计div元素的宽度和高度为49%×200px,如果用户将窗口大小调整到420px或以下,则该元素将过渡为100%×100px。也就是说,当窗口宽度变化经过420px的阈值时,将会触发过渡动画:
<style type="text/css">div {float: left; margin: 2px;width: 49%; height: 200px;background: #93FB40;border-radius: 12px;box-shadow: 2px 2px 2px #999;transition: width 1s ease, height 1s ease;}@media only screen and (max-width : 420px) {div {width: 100%;height: 100px;}}</style><div></div><div></div>
6、JavaScript事件
【示例6】可以使用纯粹的CSS伪类触发过渡,为了方便用户理解,这里通过jQuery脚本触发过渡:
<script type="text/javascript" src="images/jquery-1.10.2.js"></script><script type="text/javascript">$(function() {$("#button").click(function() {$(".box").toggleClass("change");});});</script><style type="text/css">.box {margin:4px;background: #93FB40;border-radius: 12px;box-shadow: 2px 2px 2px #999;width: 50%; height: 100px;transition: width 2s ease, height 2s ease;}.change { width: 100%; height: 120px;}</style><input type="button" id="button" value="触发过渡动画" /><div class="box"></div>
在文档中包含一个box类的盒子和一个按钮,当单击按钮时,jQuery脚本会将盒子的类切换为change,从而触发过渡动画:
上面演示了样式发生变化会导致过渡动画,也可以通过其他方法触发这些更改,包括通过JavaScript脚本动态更改。从执行效率来看,事件通常应当通过JavaScript触发,简单动画或过渡则应使用CSS触发。
3、帧动画
2012年4月,W3C发布CSS Animations工作草案,在这个草案中描述了CSS关键帧动画的基本实现方法和属性。目前主流浏览器都支持CSS帧动画。
3.1、设置关键帧
CSS3使用@keyframes定义关键帧,具体用法如下所示:
@keyframes animationname {keyframes-selector {css-styles;}}
其中参数说明如下:
- animationname:定义动画的名称。
- keyframes-selector:定义帧的时间位置,也就是动画时长的百分比,合法的值包括:0~100%、from(等价于0)、to(等价于100%)。
- css-styles:表示一个或多个合法的CSS样式属性。
在动画设计过程中,用户能够多次改变CSS样式,以百分比定义样式改变发生的时间,或者通过关键词from和to。为了获得最佳浏览器支持,设计关键帧动画时,应该始终定义0和100%位置帧。最后,为每帧定义动态样式,同时将动画与选择器绑定。
【示例】演示让一个小方盒沿着方形框内壁匀速运动:
<style>#wrap { /* 定义运动轨迹包含框*/position:relative; /* 定义定位包含框,避免小盒子跑到外面运动*/border:solid 1px red;width:250px; height:250px;}#box { /* 定义运动小盒的样式*/position:absolute;left:0; top:0;width: 50px; height: 50px;background: #93FB40;border-radius: 8px;box-shadow: 2px 2px 2px #999;/*定义帧动画:名称为ball,动画时长5s,动画类型为匀速渐变,动画无限播放*/animation: ball 5s linear infinite;}/*定义关键帧:共包括5帧,分别在总时长为0、25%、50%、75%、100%的位置*//*每帧中设置动画属性为left和top,让它们的值匀速渐变,产生运动动画*/@keyframes ball {0 {left:0;top:0;}25% {left:200px;top:0;}50% {left:200px;top:200px;}75% {left:0;top:200px;}100% {left:0;top:0;}}</style><div id="wrap"><div id="box"></div></div>
3.2、设置动画属性
Animations功能与Transition功能相同,都是通过改变元素的属性值实现动画效果。它们的区别在于:使用Transitions功能时只能通过指定属性的开始值与结束值,然后以在这两个属性值之间进行平滑过渡的方式实现动画效果,因此不能实现比较复杂的动画效果;而Animations功能则通过定义多个关键帧以及定义每个关键帧中元素的属性值实现更为复杂的动画效果。
1.定义动画名称
使用animation-name属性可以定义CSS动画的名称,语法如下所示:
animation-name:none | IDENT [, none | IDENT ]*;
其中,初始值为none,定义一个适用的动画列表。每个名字用来选择动画关键帧,提供动画的属性值。如名称是none,就不会有动画。
2.定义动画时间
使用animation-duration属性可以定义CSS动画的播放时间,语法如下所示。
animation-duration:<time> [, <time>]*;
在默认情况下,该属性值为0,这意味着动画周期为0,即不会有动画。当值为负值时,则被视为0。
3.定义动画类型
使用animation-timing-function属性可以定义CSS动画类型,语法如下所示。
animation-timing-function:ease | linear | ease-in | ease-out | ease-in-out | cubicbezier(<number>, <number>, number>, <number>) [,
ease | linear |ease-in | ease-out | ease-in-out | cubic-bezier(<number>, <number>,<number>, <number>)]*
初始值为ease,取值说明可参考上面介绍的过渡动画类型。
4.定义延迟时间
使用animation-delay属性可以定义CSS动画延迟播放的时间,语法如下所示:
animation-delay:<time> [, <time>]*;
该属性允许一个动画开始执行一段时间后才被应用。当动画延迟时间为0,即默认动画延迟时间,则意味着动画将尽快执行,否则该值指定将延迟执行的时间。
5.定义播放次数
使用animation-delay属性可以定义CSS动画延迟播放的时间,语法如下所示:
animation-delay:<time> [, <time>]*;
该属性允许一个动画开始执行一段时间后才被应用。当动画延迟时间为0,即默认动画延迟时间,则意味着动画将尽快执行,否则该值指定将延迟执行的时间。
6.定义播放方向
使用animation-direction属性定义CSS动画的播放方向,基本语法如下所示。
animation-direction:normal | alternate [, normal | alternate]*;
默认值为normal。当为默认值时,动画的每次循环都向前播放。另一个值是alternate,设置该值则表示第偶数次向前播放,第奇数次向反方向播放。
7.定义播放状态
使用animation-play-state属性定义动画正在运行还是暂停,语法如下所示:
animation-play-state: paused|running;
初始值为running。其中,paused定义动画已暂停,running定义动画正在播放。
提示:可以在JavaScript中使用该属性,这样就能在播放过程中暂停动画。在JavaScript脚本中用法如下。
8.定义播放外状态
使用animation-fill-mode属性定义动画播放外状态,语法如下所示。
animation-fill-mode:none | forwards | backwards | both [ , none | forwards | backwards | both ]*
初始值为none,如果提供多个属性值,以逗号进行分隔。取值说明如下:
- none:不设置对象动画之外的状态。
- forwards:设置对象状态为动画结束时的状态。
- backwards:设置对象状态为动画开始时的状态。
- both:设置对象状态为动画结束或开始的状态。
【示例】设计一个小球,并定义它水平向左运动,动画结束之后,再返回起始点位置:
<style>/*启动运动的小球,并定义动画结束后返回*/.ball{width: 50px; height: 50px;background: #93FB40;border-radius: 100%;box-shadow:2px 2px 2px #999;animation:ball 1s ease backwards;}/*定义小球水平运动关键帧*/@keyframes ball{0%{transform:translate(0,0);}100%{transform:translate(400px);}}</style><div class="ball"></div>
效果如下图所示:
相关文章:

CSS3设计动画样式
CSS3动画包括过渡动画和关键帧动画,它们主要通过改变CSS属性值来模拟实现。我将详细介绍Transform、Transitions和Animations 3大功能模块,其中Transform实现对网页对象的变形操作,Transitions实现CSS属性过渡变化,Animations实现…...
AtCoder abc 144
D - Water Bottle x先除以a,得到面积。体积和面积是等同考虑的。 分两种情况,一种是水比一半面积少,一种是水比一半面积多。 # -*- coding: utf-8 -*- # time : 2023/6/2 13:30 # author : yhdutongwoo.cn # desc : # file : …...
【开题报告】基于SpringBoot的医美在线预约系统的设计与实现
1.研究背景 医美行业是指结合医学和美容技术,为人们提供外貌改善和整容手术等服务的领域。随着社会经济的发展和人们审美观念的变化,医美行业得到了快速的发展,并受到越来越多人的关注和需求。 传统的医美预约方式主要依赖于电话预约或现场…...

AutoGen agent使用;调用本地LLM
参考: https://microsoft.github.io/autogen 安装: pip install pyautogen 代码 本地LLM部署可以用fastchat、vllm等框架部署openai接口: from autogen import AssistantAgent, UserProxyAgent, oai ## 调用本地模型对外的openai接口 conf…...

Docker安装matomo
Docker安装matomo 文章目录 Docker安装matomo1.安装Docker2.matomo安装 1.安装Docker curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun2.matomo安装 #拉取matomo镜像 docker pull matomo#启动matomo容器 docker run -d --name matomo -p 8093:80 -v /do…...

DSP开发例程(4): logbuf_print_to_uart
目录 DSP开发例程: logbuf_print_to_uart新建工程源码编辑app.cfgos.cmain.c 调试说明 DSP开发例程: logbuf_print_to_uart SYS/BIOS 提供了 xdc.runtime.Log, xdc.runtime.LoggerBuf 和 xdc.runtime.LoggerSys 这几个模块用于日志记录. 日志信息在 应用程序调试和状态监控中非…...

计算机毕业设计选题推荐-超市售货微信小程序/安卓APP-项目实战
✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

Azure 机器学习 - 使用 Visual Studio Code训练图像分类 TensorFlow 模型
了解如何使用 TensorFlow 和 Azure 机器学习 Visual Studio Code 扩展训练图像分类模型来识别手写数字。 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员…...
Vue 创建自定义 ref 函数
Vue 创建自定义 ref 函数 customRef customRef 用于:创建一个自定义的 ref 函数,并对其依赖项跟踪和更新触发进行显式控制。 使用 customRef 创建自定义 ref 函数 // 创建自定义 ref 函数 function myRef(value) {return customRef((track, trigger) &…...

[2016-2018]phpstudy的exp制作
[2016-2018]phpstudy的exp制作 用python的requests模块进行编写 修改请求数据包进行远程代码执行 import requests import base64 def remove_code_execute():try:url input("请输入要测试的网址:")cmd input("想要执行的命令:")cmd f"system({…...

服务器数据恢复—Zfs文件系统下文件被误删除的如何恢复数据?
服务器故障: 一台zfs文件系统服务器,管理员误操作删除服务器上的数据。 服务器数据恢复过程: 1、将故障服务器所有磁盘编号后取出,硬件工程师检测所有硬盘后没有发现有磁盘存在硬件故障。以只读方式将全部磁盘做扇区级别的镜像备…...

关于嵌入式rtthread系统与单片机芯片
简介 我估计已经有很久没更新了,近一年都在某个国企里工作,我做的就是嵌入式工程师的岗位,最近才刚刚退出来,想来说说自己的工作使用的软件和系统。 本身进公司的时候,其实做的就是写单片机的板子的程序的工作&#x…...

在Ubuntu上安装Redis并学习使用get、set和keys命令
目录 安装Redis切换到root用户搜索redis相关软件包安装redis修改配置文件重启服务器使用redis客户端连接服务器 get与set命令keys 安装Redis 我们在Ubuntu20.04上进行Redis的安装 切换到root用户 使用su命令: 在终端中,输入su并按回车键。然后输入roo…...
Ubuntu更换镜像源
Ubuntu更换镜像源 镜像源设置文件镜像源设置focal版本镜像源设置bionic版本镜像源设置 更新源问题 镜像源设置文件 备份镜像源设置文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak编辑镜像源设置文件 sudo gedit /etc/apt/sources.list镜像源设置 Ubuntu有不…...

Sulfo-CY5 NHS荧光染料的生物应用2230212-27-6星戈瑞
Sulfo-CY5 NHS ester是一种用于生物学和生物医学研究中的荧光染料,它在生物应用方面具有许多重要用途,包括但不限于以下几个方面: **生物标记:**Sulfo-CY5 NHS ester可以与生物分子(如抗体、蛋白质、核酸等)…...

Python Django 之模板继承详解(extends)
文章目录 1 概述1.1 目的1.2 标签:block、extends1.3 目录结构 2 templates 目录2.1 base.html:父页面2.2 login.html:子页面 3 其它代码3.1 settings.py3.2 views.py3.3 urls.py 1 概述 1.1 目的 模板继承 和 类继承 的目的是一样的&#…...

混合式ANC主动降噪耳机系统设计(含C源代码)
混合式ANC主动降噪耳机系统设计(含C源代码) 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送语音信号处理降噪算法,蓝牙音频,DSP音频项目核心开发资料, 1 FF信号链路与FB 链路算法处理上一样 X(n)为噪声输…...

Linux查看磁盘、内存、cpu信息
1. 查看磁盘空间信息:lsblk 2. 查看内存信息:awk $3"kB"{$2$2/1024^2;$3"GB";} 1 /proc/meminfo | column -t 3. 查看cup相关信息:lscup...
C语言 强制类型转换的各种代码示例
在C语言中,强制类型转换可以通过使用类型转换运算符来完成。以下是一些关于C语言强制类型转换的代码示例: int num 10; float fnum (float) num; // 将整数num转换为浮点数float fnum 3.14; int num (int) fnum; // 将浮点数fnum转换为整数&a…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

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

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...