描述@keyframes规则在 CSS 动画中的原理及作用,如何创建一个简单的动画
大白话描述@keyframes规则在 CSS 动画中的原理及作用,如何创建一个简单的动画?
嘿,朋友!咱来聊聊 CSS 里超酷的 @keyframes 规则。这玩意儿就像是动画的剧本,能让网页元素动起来,就像给它们施了魔法一样!
原理和作用
想象一下,你在拍一部动画电影。@keyframes 就像是这部电影的分镜脚本,它规定了元素在动画过程中不同时间点的样子。你可以设定元素在 0%(也就是动画开始的时候)、50%(动画进行到一半)、100%(动画结束)等不同阶段的样式,比如位置、大小、颜色啥的。浏览器就会根据这个脚本,平滑地把元素从一个状态变到另一个状态,这样就有了动画效果。
创建简单动画步骤
咱来创建一个简单的动画,让一个方块从左到右移动。
1. 定义 @keyframes 规则
首先,你得写好这个“动画剧本”。给这个剧本取个名字,这里我们叫它 moveRight。
/* 定义一个名为 moveRight 的动画剧本 */
@keyframes moveRight {/* 动画开始时,方块的左边距是 0px */from {margin-left: 0px;}/* 动画结束时,方块的左边距是 200px,也就是向右移动了 200px */to {margin-left: 200px;}
}
这里的 from 就相当于 0% 的时间点,to 相当于 100% 的时间点。你也可以用百分比来更精确地控制中间状态,比如:
/* 定义一个名为 moveRight 的动画剧本 */
@keyframes moveRight {/* 动画开始时,方块的左边距是 0px */0% {margin-left: 0px;}/* 动画进行到 50% 时,方块的左边距是 100px */50% {margin-left: 100px;}/* 动画结束时,方块的左边距是 200px,也就是向右移动了 200px */100% {margin-left: 200px;}
}
2. 选择要应用动画的元素
接下来,你得找个元素来表演这个动画。这里我们用一个 <div> 元素。
<!-- 创建一个 div 元素,用来展示动画 -->
<div class="animated-box"></div>
3. 给元素应用动画
最后,把这个“动画剧本”应用到元素上。
/* 选择类名为 animated-box 的元素 */
.animated-box {/* 设置元素的宽度为 50px */width: 50px;/* 设置元素的高度为 50px */height: 50px;/* 设置元素的背景颜色为蓝色 */background-color: blue;/* 应用名为 moveRight 的动画 */animation-name: moveRight;/* 设置动画的持续时间为 3 秒 */animation-duration: 3s;
}
完整代码示例
把上面的代码组合起来,就是一个完整的示例:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Simple CSS Animation</title><style>/* 定义一个名为 moveRight 的动画剧本 */@keyframes moveRight {/* 动画开始时,方块的左边距是 0px */from {margin-left: 0px;}/* 动画结束时,方块的左边距是 200px,也就是向右移动了 200px */to {margin-left: 200px;}}/* 选择类名为 animated-box 的元素 */.animated-box {/* 设置元素的宽度为 50px */width: 50px;/* 设置元素的高度为 50px */height: 50px;/* 设置元素的背景颜色为蓝色 */background-color: blue;/* 应用名为 moveRight 的动画 */animation-name: moveRight;/* 设置动画的持续时间为 3 秒 */animation-duration: 3s;}</style>
</head><body><!-- 创建一个 div 元素,用来展示动画 --><div class="animated-box"></div>
</body></html>
把这段代码保存为一个 .html 文件,用浏览器打开,你就能看到一个蓝色的方块从左到右移动啦!是不是很有趣?现在你也可以发挥自己的创意,修改 @keyframes 规则,让元素做出更多酷炫的动画效果。
那么,除了@keyframe,还有哪些创建动画的方法?
在 CSS 里,除了 @keyframes 规则,还有其他创建动画的方法,下面为你详细介绍:
1. transition(过渡)
transition 是一种简单的动画效果创建方式,它主要用于在元素的某个属性发生变化时,让这种变化以平滑过渡的形式呈现出来,而不是瞬间改变。
原理和作用
当元素的某个 CSS 属性(如颜色、大小、位置等)的值发生改变时,transition 会让这个属性值在指定的时间内逐渐变化,从而产生动画效果。这就像是一个元素从一种状态“过渡”到另一种状态。
示例代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>CSS Transition Example</title><style>/* 定义一个类名为 box 的元素样式 */.box {width: 100px;height: 100px;background-color: red;/* 设置过渡效果,当宽度属性改变时,在 2 秒内平滑过渡 */transition: width 2s;}/* 当鼠标悬停在 box 元素上时,宽度变为 300px */.box:hover {width: 300px;}</style>
</head><body><!-- 创建一个 div 元素,应用 box 类 --><div class="box"></div>
</body></html>
在这个例子中,当鼠标悬停在方块上时,方块的宽度会在 2 秒内从 100px 平滑地过渡到 300px。
2. transform(变换)结合 JavaScript
transform 可以对元素进行旋转、缩放、移动、倾斜等操作,而结合 JavaScript 可以动态地改变 transform 的值,从而创建动画效果。
原理和作用
transform 提供了对元素进行几何变换的能力,JavaScript 则可以控制这些变换在不同时间点的变化,实现更复杂的动画逻辑。
示例代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JavaScript and CSS Transform Animation</title><style>/* 定义一个类名为 circle 的元素样式 */.circle {width: 50px;height: 50px;background-color: green;border-radius: 50%;position: absolute;top: 50px;left: 50px;}</style>
</head><body><!-- 创建一个 div 元素,应用 circle 类 --><div class="circle" id="circle"></div><script>// 获取 circle 元素const circle = document.getElementById('circle');let angle = 0;// 定义一个函数,用于旋转元素function rotateCircle() {angle += 1;// 设置元素的 transform 属性,实现旋转效果circle.style.transform = `rotate(${angle}deg)`;// 每 10 毫秒调用一次 rotateCircle 函数,实现连续旋转requestAnimationFrame(rotateCircle);}// 开始旋转动画rotateCircle();</script>
</body></html>
在这个例子中,JavaScript 不断改变 circle 元素的旋转角度,从而让圆形元素持续旋转。
3. SVG 动画
SVG(可缩放矢量图形)本身就支持动画,通过 <animate>、<animateTransform> 等元素可以直接在 SVG 中创建动画。
原理和作用
SVG 动画元素可以定义在 SVG 图形的特定属性上,控制这些属性随时间的变化,从而实现动画效果。
示例代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>SVG Animation Example</title>
</head><body><!-- 创建一个 SVG 元素 --><svg width="200" height="200" viewBox="0 0 200 200"><!-- 创建一个圆形元素 --><circle cx="50" cy="50" r="20" fill="blue"><!-- 定义一个动画,让圆形的 cx 属性在 5 秒内从 50 变化到 150 --><animate attributeName="cx" from="50" to="150" dur="5s" repeatCount="indefinite" /></circle></svg>
</body></html>
在这个例子中,SVG 中的 <animate> 元素让圆形的 cx(圆心的 x 坐标)属性在 5 秒内从 50 变化到 150,并且无限重复这个动画。
除了transition,还有哪些创建动画的方法?
除了 transition,在前端开发中有多种创建动画的方法,以下为你详细介绍:
CSS 层面
1. @keyframes 规则
这是 CSS 中创建复杂动画的强大工具。它允许你定义动画的关键帧,也就是元素在动画过程中不同时间点的样式,浏览器会自动补全这些关键帧之间的过渡效果。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Keyframes Animation</title><style>/* 定义名为 bounce 的动画关键帧 */@keyframes bounce {0%, 20%, 50%, 80%, 100% {transform: translateY(0);}40% {transform: translateY(-30px);}60% {transform: translateY(-15px);}}/* 应用动画的元素样式 */.ball {width: 50px;height: 50px;background-color: red;border-radius: 50%;/* 应用 bounce 动画,持续 2 秒,无限循环 */animation: bounce 2s infinite;}</style>
</head><body><!-- 创建一个应用动画的元素 --><div class="ball"></div>
</body></html>
在上述代码中,@keyframes 定义了一个名为 bounce 的动画,模拟了小球弹跳的效果。.ball 类的元素应用了这个动画,让小球不断弹跳。
2. transform 结合 will-change
transform 可以对元素进行旋转、缩放、移动、倾斜等操作,而 will-change 可以提前告知浏览器某个元素即将发生变化,从而让浏览器提前做好优化准备,提升动画的性能。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Transform with Will-Change</title><style>/* 应用动画的元素样式 */.box {width: 100px;height: 100px;background-color: blue;/* 告知浏览器元素的 transform 属性即将发生变化 */will-change: transform;transition: transform 1s;}/* 鼠标悬停时的样式 */.box:hover {transform: rotate(45deg);}</style>
</head><body><!-- 创建一个应用动画的元素 --><div class="box"></div>
</body></html>
这里,will-change 让浏览器提前优化 transform 动画,当鼠标悬停在元素上时,元素会平滑地旋转 45 度。
JavaScript 层面
1. requestAnimationFrame
这是 JavaScript 中用于创建高性能动画的方法。它会在浏览器的下一次重绘之前执行传入的回调函数,从而实现流畅的动画效果。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Request Animation Frame</title><style>/* 应用动画的元素样式 */.square {width: 50px;height: 50px;background-color: green;position: absolute;left: 0;}</style>
</head><body><!-- 创建一个应用动画的元素 --><div class="square" id="square"></div><script>const square = document.getElementById('square');let position = 0;// 定义动画函数function animate() {position++;square.style.left = position + 'px';// 继续调用动画函数,实现连续动画requestAnimationFrame(animate);}// 开始动画animate();</script>
</body></html>
此代码中,requestAnimationFrame 不断调用 animate 函数,让方块不断向右移动。
2. GSAP(GreenSock Animation Platform)
GSAP 是一个强大的 JavaScript 动画库,提供了丰富的动画功能和简洁的 API,能创建复杂的动画效果。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>GSAP Animation</title><!-- 引入 GSAP 库 --><script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.5/gsap.min.js"></script>
</head><body><!-- 创建一个应用动画的元素 --><div class="element" id="element">Animated Element</div><script>const element = document.getElementById('element');// 使用 GSAP 创建动画,让元素在 2 秒内向右移动 200px 并旋转 360 度gsap.to(element, {duration: 2,x: 200,rotation: 360});</script>
</body></html>
在这个例子中,GSAP 的 gsap.to 方法让元素在 2 秒内向右移动 200px 并旋转 360 度。
SVG 层面
1. SVG <animate> 元素
SVG 提供了 <animate> 元素用于创建动画,它可以控制 SVG 元素的属性随时间变化。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>SVG Animate</title>
</head><body><!-- 创建一个 SVG 元素 --><svg width="200" height="200" viewBox="0 0 200 200"><!-- 创建一个矩形元素 --><rect x="50" y="50" width="50" height="50" fill="orange"><!-- 定义一个动画,让矩形的 x 属性在 3 秒内从 50 变化到 150 --><animate attributeName="x" from="50" to="150" dur="3s" repeatCount="indefinite" /></rect></svg>
</body></html>
这里,<animate> 元素让矩形的 x 属性在 3 秒内从 50 变化到 150,并且无限循环这个动画。
除了transition,还有哪些创建动画的方法?
transition 和 @keyframes 规则都是 CSS 中用于创建动画效果的工具,但它们在多个方面存在明显区别,下面为你详细介绍:
基本概念
- transition:它是一种用于在元素的两个状态之间创建平滑过渡效果的机制。当元素的某个 CSS 属性值发生变化时,
transition会让这个属性值在指定的时间内逐渐改变,而不是瞬间切换。例如,当鼠标悬停在元素上时,元素的颜色或大小发生变化,使用transition可以让这种变化看起来更自然。 - @keyframes:
@keyframes规则允许你定义一个动画的完整过程,通过指定元素在不同时间点(关键帧)的样式,浏览器会自动补全这些关键帧之间的过渡效果,从而创建出复杂的动画序列。你可以控制动画的开始、中间和结束状态,以及中间的多个过渡状态。
语法和使用方式
- transition:使用时需要指定要过渡的属性、过渡的持续时间,还可以选择指定过渡的延迟时间、过渡的速度曲线等。语法如下:
/* 选择要应用过渡效果的元素 */
.element {/* 指定要过渡的属性为 width,过渡持续时间为 2 秒,过渡速度曲线为 ease */transition: width 2s ease;
}/* 当元素处于悬停状态时,改变 width 属性的值 */
.element:hover {width: 200px;
}
在上述代码中,当鼠标悬停在 .element 元素上时,其 width 属性会在 2 秒内平滑地从初始值过渡到 200px。
- @keyframes:首先需要使用
@keyframes关键字定义一个动画,为其命名并指定关键帧的样式。然后,将这个动画应用到元素上,并设置动画的持续时间、播放次数等属性。语法如下:
/* 定义一个名为 slide 的动画 */
@keyframes slide {/* 动画开始时,元素的左边距为 0px */from {margin-left: 0px;}/* 动画结束时,元素的左边距为 200px */to {margin-left: 200px;}
}/* 选择要应用动画的元素 */
.element {/* 应用名为 slide 的动画,动画持续时间为 3 秒,无限循环播放 */animation: slide 3s infinite;
}
这里,.element 元素会不断地从左边移动到右边,每次移动的过程持续 3 秒。
动画复杂度
- transition:适用于创建简单的、从一个状态到另一个状态的过渡效果。它只能处理两个状态之间的变化,无法创建包含多个中间状态的复杂动画。例如,你只能在元素的初始状态和悬停状态之间创建过渡效果。
- @keyframes:可以创建非常复杂的动画,因为你可以定义多个关键帧,精确控制元素在动画过程中的每一个阶段的样式。你可以实现元素的多次移动、旋转、缩放等组合效果,还可以设置不同的时间间隔和速度曲线。
触发方式
- transition:通常需要一个事件来触发属性的变化,从而启动过渡效果。常见的触发事件包括鼠标悬停(
:hover)、焦点获取(:focus)、元素的激活状态(:active)等。只有当这些事件发生时,元素的属性值发生改变,过渡效果才会开始。 - @keyframes:动画一旦应用到元素上,就会根据设置的属性自动开始播放,不需要额外的事件触发。你可以通过设置
animation-play-state属性来暂停或继续动画的播放。
应用场景
- transition:常用于简单的交互效果,如按钮的悬停效果、菜单的展开和收缩等。这些场景只需要在两个状态之间进行平滑过渡,使用
transition可以快速实现且代码简洁。 - @keyframes:适用于创建复杂的动画效果,如加载动画、页面切换动画、角色动画等。当需要精确控制动画的每一个阶段时,
@keyframes是更好的选择。
相关文章:
描述@keyframes规则在 CSS 动画中的原理及作用,如何创建一个简单的动画
大白话描述keyframes规则在 CSS 动画中的原理及作用,如何创建一个简单的动画? 嘿,朋友!咱来聊聊 CSS 里超酷的 keyframes 规则。这玩意儿就像是动画的剧本,能让网页元素动起来,就像给它们施了魔法一样&…...
国产达梦(DM)数据库的安装(Linux系统)
目录 一、安装前的准备工作 1.1 导包 1.2 创建用户和组 1.3 修改文件打开最大数 1.4 目录规划 1.5 修改目录权限 二、安装DM8 2.1 挂载镜像 2.2 命令行安装 2.3 配置环境变量 2.4 启动图形化界面 三、配置实例 四、注册服务 五、启动 停止 查看状态 六、数据库客…...
AI日报 - 2025年3月24日
🌟 今日概览(60秒速览) ▎🤖 AGI突破 | Lyra生物序列建模架构效率惊人 在100生物任务中达最优,推理速度提升高达12万倍 ▎💼 商业动向 | OpenAI用户破4亿,Meta与Reliance探讨AI合作 生态扩展与全…...
git的底层原理
git的底层原理 三段话总结git, 1. 工作原理:git管理是一个DAG有向无环图,HEAD指针指向branch或直接指向commit,branch指向commit,commit指向tree,tree指向别的tree或直接指向blob。 2. git所管理的一个目录…...
【Spring】Spring框架介绍
在 Java 企业级应用开发领域,Spring 框架凭借强大功能、高度灵活性与卓越扩展性,成为众多开发者构建大型应用系统的首选。接下来为大家深入剖析 Spring 框架的核心特性、架构设计及实际项目应用。 一、Spring 框架简介 Spring 框架由 Rod Johnson …...
MATLAB+Arduino利用板上的按键控制板上Led灯
几年不使用,之前的知识都忘掉了。需要逐步捡起来。 1 熟悉按键的使用 2熟悉灯的控制 1 电路 我们将通过 MATLAB 的 Arduino 支持包与 Arduino 板通信,读取按键状态并控制 LED 灯的亮灭。 按键:连接到 Arduino 的数字引脚(例如…...
AI比人脑更强,因为被植入思维模型【21】冯诺依曼思维模型
定义 冯诺依曼思维模型是一种基于数理逻辑和系统分析的思维方式,它将复杂的问题或系统分解为若干个基本的组成部分,通过建立数学模型和逻辑规则来描述和分析这些部分之间的关系,进而实现对整个系统的理解和优化。该模型强调从整体到局部、再…...
【QA】Qt中有哪些命令模式的运用?
在 C/Qt 中,命令模式(Command Pattern)的实现通常用于封装操作请求、支持撤销/重做(Undo/Redo)或解耦调用者与接收者。以下是几种常见的实现方式及示例: 1. Qt 的 QUndoCommand 和 QUndoStack(内…...
【连续自然数的和,双指针找区间】
对一个给定的正整数 MM,求出所有的连续的正整数段(每一段至少有两个数),这些连续的自然数段中的全部数之和为 MM。 例子:19981999200020012002100001998199920002001200210000,所以从 19981998 到 2002200…...
Cocos Creator Shader入门实战(五):材质的了解、使用和动态构建
引擎:3.8.5 您好,我是鹤九日! 回顾 前面的几篇文章,讲述的主要是Cocos引擎对Shader使用的一些固定规则,这里汇总下: 一、Shader实现基础是OpenGL ES可编程渲染管线,开发者只需关注顶点着色器和…...
vue设置自定义logo跟标题
准备 Logo 图片 将自定义的 Logo 图片(如 logo.png)放置在项目的 public文件夹下。 使用环境变量设置 Logo 和标题(可选) 创建或修改 .env 文件 在项目根目录下创建或修改 .env 文件,添加以下内容: VITE_A…...
Linux 账号和权限管理命令选项解释
用户账号文件 配置文件 /etc/passwd:用于保存用户 输出如下: root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin 每一行代表一个用户&…...
尝试在软考65天前开始成为软件设计师-计算机网络
OSI/RM 七层模型 层次名功能主要协议7应用层实现具体应用功能 FTP(文件传输)、HTTP、Telnet、 POP3(邮件)SMTP(邮件) ------- DHCP、TFTP(小文件)、 SNMP、 DNS(域名) 6表示层数据格式,加密,压缩.....5会话层建立,管理&终止对话4传输层端到端连接TCP,UDP3网络层分组传输&a…...
VMware主机换到高配电脑,高版本系统的问题
原来主机是i3 ,windows7系统,vmware 14.0,虚机系统是ubuntu 14.04。目标新机是i7 14700KF,windows11系统。原以为安装虚拟机,将磁盘文件,虚拟机配置文件拷贝过去可以直接用。 新目标主机先安装了vmware 15,运行原理虚机࿰…...
2025年3月 CCF GESP C++ 二级 真题解析
1. 单选题(每题2分,共30分) 第1题 试题:2025年春节有两件轰动全球的事件,一个是DeepSeek横空出世,另一个是贺岁片《哪吒2》票房惊人,入了全球票房榜。下面关于DeepSeek与《哪吒2》的描述成立的是( )。 A. 《哪吒2》是一…...
Nginx请求头Hos头攻击
HTTP请求头中的Host字段用于指定客户端请求的目标主机名(域名/IP)。当Nginx作为反向代理时,可利用该字段进行访问控制,防止非法域名或IP直接访问服务。 解决方法:添加判断请求头,如果不是指定请求头&#…...
2025年03月10日人慧前端面试(外包滴滴)
目录 普通函数和箭头函数的区别loader 和 plugin 的区别webpack 怎么实现分包,为什么要分包webpack 的构建流程变量提升react 开发中遇到过什么问题什么是闭包vue 开发中遇到过什么问题vue中的 dep 和 watcher 的依赖收集是什么阶段什么是原型链react setState 是同…...
【Linux内核系列】:动静态库详解
🔥 本文专栏:Linux 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 有些鸟儿是注定是关不住的,因为它们的每一片羽翼都沾满了自由的光辉 ★★★ 本文前置知识: 编译与链接的过程…...
maptalks图层交互 - 模拟 Tooltip
maptalks图层交互 - 模拟 Tooltip 图层交互-模拟tooltip官方文档 <!DOCTYPE html> <html><meta charsetUTF-8 /><meta nameviewport contentwidthdevice-width, initial-scale1 /><title>图层交互 - 模拟 Tooltip</title><style typet…...
windows环境下NER Python项目环境配置(内含真的从头安的perl配置)
注意 本文是基于完整项目的环境配置,即本身可运行项目你拿来用 其中有一些其他问题,知道的忽略即可 导入pycharm基本包怎么下就不说了(这个都问?给你一拳o(`ω*)o) 看perl跳转第5条 1.predict报错多个设备…...
IDEA批量替换项目下所有文件中的特定内容
文章目录 1. 问题引入2. 批量替换项目下所有文件中的特定内容2.1 右键项目的根目录,点击在文件中替换2.2 输入要替换的内容 3. 解决替换一整行文本后出现空行的问题4. 增加筛选条件提高匹配的精确度 更多 IDEA 的使用技巧可以查看 IDEA 专栏: IDEA 1. 问…...
【计算机网络】网络编程
文章目录 1. 客户端/服务器2. TCP/UDP协议3. 网络编程套接字-socket3.1 API的使用3.1 DatagramScoket类3.1 DatagramScoket类 4. 通过UDP实现回显服务器程序4.1 服务器代码4.2 客户端代码4.3 代码执行过程4.4 通过UDP实现翻译客户端 5. 通过TCP实现回显服务器5.1 服务器代码5.2…...
Django 中@login_required 配置详解
在 Django 中对 login_required 进行配置,主要涉及全局配置和视图函数局部配置两方面,下面为你详细介绍配置方法。 全局配置 全局配置主要是设定默认的登录 URL,也就是当未登录用户尝试访问被 login_required 装饰的视图时,会被…...
【408--复习笔记】数据结构
【408--复习笔记】数据结构 1.绪论2.线性表3.栈、队列、数组4.串5.树与二叉树6.图7.查找8.排序 1.绪论 2.线性表 3.栈、队列、数组 4.串 5.树与二叉树 6.图 7.查找 8.排序...
Android <queries>声明的作用和配置方法
在Android应用中使用resolveActivity方法会提示在清单文件中添加标签,下面我们就看下声明的作用和配置方法: 一、queries 声明的作用 在Android 11及更高版本中,声明被引入以控制应用之间的交互。通过在AndroidManifest.xml中添加标签&…...
C++多线程编程:从创建到管理的终极指南
在高性能计算时代,掌握多线程编程是提升程序效率的必修课!本文将手把手教你如何用C++11标准库轻松创建和管理线程,告别单线程的“龟速”,让代码跑出多核CPU的性能! 一、多线程为何重要? 充分利用多核CPU:现代计算机普遍支持多核并行,多线程可让程序性能指数级提升。提升…...
【蓝桥杯】4535勇闯魔堡(多源BFS + 二分)
思路 k有一个范围(0到怪物攻击的最大值),求满足要求的k的最小值。很明显的二分套路。 关键是check函数怎么写,我们需要找到一条从第一行到最后一行的路径,每一次可以从上下左右四个方向前进,那么我么可以用…...
HTML图像标签的详细介绍
1. 常用图像格式 格式特点适用场景JPEG有损压缩,文件小,不支持透明适合照片、复杂图像PNG无损压缩,支持透明(Alpha通道)适合图标、需要透明背景的图片GIF支持动画,最多256色简单动画、低色彩图标WebP谷歌开…...
Chapter 4-15. Troubleshooting Congestion in Fibre Channel Fabrics
show zone member: Shows the name of the zone to which a device belongs to. This command can be used to find the victims of a culprit device or vice versa. 显示设备所属的区域名称。该命令可用于查找罪魁祸首设备的受害者,反之亦然。 show zone active: Shows the…...
QT三 自定义控件
一 自定义控件 现在的需求是这样: 假设我们要在QWidget 上做定制,这个定制包括了关于 一些事件处理,意味着要重写QWidget的一些代码,这是不实际的,因此我们需要自己写一个MyWidget继承QWidget,然后再MyWi…...
