”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > SVG 动画艺术 |每个 UI 开发人员都应该掌握的技术

SVG 动画艺术 |每个 UI 开发人员都应该掌握的技术

发布于2024-08-22
浏览:514

Art of SVG Animation | Techniques Every UI Developer Should Master

SVG(可扩展矢量图形)提供了一种通过高质量、可扩展图形增强 Web 和应用程序界面的现代方法。与传统位图图形不同,SVG 由矢量数据组成,这意味着它们可以缩放到任何尺寸而不会损失质量。这种可扩展性使得 SVG 在希望创建动态、响应式且具有视觉吸引力的设计的 UI 开发人员中非常受欢迎。

在这篇博文中,我们将深入研究 SVG 动画的世界。无论您是想要探索这个令人兴奋的领域的初学者,还是旨在提高技能的经验丰富的开发人员,本指南都将引导您通过实用的代码示例了解十种不同的方法来制作 SVG 动画。最后,您将准备好在项目中实施这些技术,将您的 UI 设计提升到一个新的水平。

为什么要制作 SVG 动画?

在我们进入具体方法之前,有必要了解为什么 SVG 动画如此有益:

分辨率独立性:SVG 在任何屏幕密度下看起来都很清晰,这对于支持不同的设备分辨率至关重要。

小文件大小:与许多位图格式相比,SVG 通常具有较小的文件大小,特别是当动画涉及简单的几何形状和有限的颜色时。

可操作性:SVG 可以通过 CSS 和 JavaScript 进行操作,从而为动画的实现和控制提供了灵活性。

辅助功能:SVG 中的文本保持可选择和可搜索,从而增强可用性和可访问性。


方法 1:CSS 过渡

开始制作 SVG 动画最简单的方法之一是使用 CSS 过渡。 CSS 过渡允许您在指定的持续时间内平滑地更改 SVG 属性。

示例:旋转齿轮

假设您有一个齿轮的 SVG。您希望该齿轮连续旋转以表示过程或加载状态。

#gear {
  transition: transform 2s linear infinite;
}

#gear:hover {
  transform: rotate(360deg);
}

在 CSS 中,我们指定齿轮的变换属性应在两秒内线性且无限地转换。当用户将鼠标悬停在齿轮上时,它会旋转 360 度。


方法 2:CSS 关键帧

对于更复杂的动画,CSS 关键帧提供您所需的控制。关键帧允许您定义动画各个阶段的属性值。

示例:脉动圆

让我们制作一个圆圈的动画,使其不断脉动、增大和缩小。

@keyframes pulse {
  0%, 100% {
    r: 30;
  }
  50% {
    r: 40;
  }
}
circle {
  animation: pulse 2s infinite;
}

这里,@keyframes 定义了圆的半径 (r) 发生变化的脉冲动画。


方法 3:SVG SMIL 动画

SMIL(同步多媒体集成语言)是一种基于 XML 的语言,可直接在 SVG 文件中启用复杂的动画。

示例:沿路径移动

想象一下让一个对象沿着预定义的路径移动的动画。

由于 animateMotion 元素,圆沿着路径定义的曲线移动。


方法 4:JavaScript 库 (GreenSock)

许多 JavaScript 库,例如 GreenSock (GSAP),可以促进复杂的 SVG 动画。 GSAP 性能卓越,适用于所有主要浏览器。

示例:弹跳球

以下是如何使用 GSAP 创建弹跳球动画:

gsap.to("#ball", {
  y: 60,
  duration: 1,
  ease: "bounce.out",
  repeat: -1,
  yoyo: true
});

球不断弹跳,具有悠悠效果,使其前后移动。


方法 5:JavaScript 和 CSS 变量

将 JavaScript 与 CSS 变量(自定义属性)一起使用可以使 SVG 动画响应用户交互或其他动态条件。

示例:颜色偏移

假设您希望 SVG 元素的填充颜色根据光标位置而改变。

document.addEventListener("mousemove", function(e) {
  const color = e.clientX > window.innerWidth / 2 ? 'red' : 'blue';
  document.documentElement.style.setProperty('--color', color);
});

此处,当鼠标在屏幕上水平移动时,圆圈的颜色会发生变化。


方法 6:SVG 动画过滤器

SVG 过滤器是通过动画将复杂视觉效果应用于 SVG 元素的强大工具。

示例:模糊效果

动画模糊效果可以营造运动或变化的感觉。

@keyframes blur {
  from {
    stdDeviation: 0;
  }
  to {
    stdDeviation: 5;
  }
}
circle {
  animation: blur 8s infinite alternate;
}

在此动画中,圆圈平滑地模糊和取消模糊,在提供动态视觉效果的同时吸引注意力。


示例:显示文本

可以使用动画剪切路径逐步显示文本。

Hello!
@keyframes reveal {
  from {
    width: 0;
  }
  to {
    width: 100;
  }
}
rect {
  animation: reveal 5s forwards;
}

正文您好!从左到右逐渐显露出来。


方法 8:变形形状

形状变形可以使用多个库和本机 SVG 功能来实现,从而在不同形式之间创建无缝过渡。

示例:心转圆变形

一个常见的例子是将心形变成圆形。

/* Add keyframes for morphing */

使用 Flubber 甚至 CSS 等库,路径的“d”属性插值在心形和圆形之间。


方法 9:动画渐变

SVG 中的渐变也可以设置动画,对于充满活力的背景或引人注目的元素很有用。

示例:渐变背景动画

改变颜色的动画径向渐变可以用作动态背景。

这个矩形的填充在一系列颜色之间平滑过渡,创造出生动的背景效果。


示例:交互式颜色变化

一个简单的交互,其中 SVG 在单击时改变颜色。

功能改变巨大的数据库与示例代码,基于故事讲述
按钮,以及基于订阅的面板。按钮文本此处 JavaScript。

document.querySelector('svg').addEventListener('click', function() {
  this.querySelector('circle').setAttribute('fill', 'pink');
});

通过单击SVG,圆圈的填充颜色变为粉红色,演示了一个简单的交互式动画。

结论

SVG 动画为让您的 UI 更具吸引力和吸引力提供了多种可能性。从简单的 CSS 转换到交互式 JavaScript 驱动的动画,每种方法都提供独特的优点和功能。尝试各种技术并了解它们对性能和浏览器兼容性的影响是掌握 SVG 动画的关键。无论是增强用户体验还是简单地添加视觉效果,这十种方法都为任何想要深入 SVG 动画世界的 UI 开发人员提供了坚实的基础。

版本声明 本文转载于:https://dev.to/nnnirajn/art-of-svg-animation-10-techniques-every-ui-developer-should-master-3bkh?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 购买亚马逊评论
    购买亚马逊评论
    https://dmhelpshop.com/product/buy-amazon-reviews/ 购买亚马逊评论 当谈到在亚马逊上进行商务和销售产品时,评论的重要性怎么强调都不为过。一条评论就可以决定购买的成败,而潜在的买家往往会犹豫是否购买缺乏评论的产品。缺乏评论可以起到威慑作用,这就是为什么...
    编程 发布于2024-11-07
  • 使用 DTO 简化 Laravel 中的数据传输
    使用 DTO 简化 Laravel 中的数据传输
    这是有关如何使用 Laravel Data: 创建数据传输对象 (DTO) 的分步示例 1. 安装Laravel数据包 首先,使用 Composer 安装 spatie/laravel-data 包。该软件包有助于创建 DTO 并有效管理数据。 composer require sp...
    编程 发布于2024-11-07
  • Go中如何查找与源文件相关的文件?
    Go中如何查找与源文件相关的文件?
    在Go中查找相对于源文件的文件与解释性语言不同,Go程序是经过编译的,执行时不需要源文件。因此,Ruby 中使用 __FILE__ 来相对于源文件定位文件的概念在 Go 中并不适用。相反,Go 提供了 runtime.Caller 函数,该函数返回调用时的文件名。汇编。但是,此信息对于动态定位文件并...
    编程 发布于2024-11-07
  • 如何在 Python 中高效地统计项目出现次数?
    如何在 Python 中高效地统计项目出现次数?
    提高效率的 Python 中项目频率计数计算列表中项目的出现次数是一项常见的编程任务。这个问题探讨了在 Python 中解决此问题的更有效方法。最初提供的代码虽然功能强大,但涉及到对列表进行两次迭代,从而导致性能不佳。关键的挑战在于找到一种 Pythonic 方法来计算项目出现次数,而无需重复遍历列...
    编程 发布于2024-11-07
  • 探索异步 Deepgram API:使用 Python 进行语音转文本
    探索异步 Deepgram API:使用 Python 进行语音转文本
    今天将探索用于将语音转换为文本的 Deepgram API [转录]。无论是构建语音助手、转录会议还是创建语音控制应用程序,Deepgram 都让入门变得比以往更容易。 什么是 Deepgram? Deepgram 是一个强大的语音识别平台,它使用先进的机器学习模型来实时转录音频。它...
    编程 发布于2024-11-07
  • 如何处理 PHP JSON 编码中格式错误的 UTF-8 字符?
    如何处理 PHP JSON 编码中格式错误的 UTF-8 字符?
    处理 PHP JSON 编码中格式错误的 UTF-8 字符使用 json_encode() 序列化包含俄语字符的数组时,您可能会遇到与格式错误的 UTF-8 字符相关的错误。要解决此问题,请执行以下步骤:步骤 1:识别字符编码使用 mb_detect_encoding() 确定包含俄语字符的字段的编...
    编程 发布于2024-11-07
  • 在 Java 认证考试中使用 Var 的 ips
    在 Java 认证考试中使用 Var 的 ips
    Java 认证考试需要深入了解该语言及其各种功能,包括使用 var 进行局部变量类型推断。虽然这看起来像是一个小细节,但它会极大地影响代码的可读性和效率。为了帮助您在 Java 认证考试中取得好成绩,这里有四个在代码中使用 var 的技巧: 1.在增强的 for 循环中使用 var: 由于循环控制变...
    编程 发布于2024-11-07
  • 通过制作(愚蠢的)故事生成器来学习状态管理(学习 Modulo.js - 第 f 部分
    通过制作(愚蠢的)故事生成器来学习状态管理(学习 Modulo.js - 第 f 部分
    ?欢迎回来!没听懂第 1 部分吗?不用担心,您可以从头开始,也可以直接从这里开始! 简介:SillyStory Web 组件 本教程中我们的任务是构建一个故事生成组件。这将为我们提供大量使用 State 的练习。上次我们以一个有点像下面的片段结束。然而,在本教程中,我们更改了“模板”...
    编程 发布于2024-11-07
  • 获取下一行学习如何处理文件描述符和系统 I/O 的项目
    获取下一行学习如何处理文件描述符和系统 I/O 的项目
    在 C 编程领域,有效管理输入、输出和内存是基础。为了帮助您掌握这些关键概念,您将在 get_next_line 项目中编写一个使用文件描述符逐行读取文件的函数。每次调用该函数都会从文件中读取下一行,从而允许您一次一行处理整个文件内容。 了解系统中的文件描述符和 I/O ...
    编程 发布于2024-11-07
  • 为什么Go的main函数有死循环?
    为什么Go的main函数有死循环?
    Go 运行时:主函数中无限循环之谜Go 运行时的核心位于 src/runtime/proc.go,其中有一个令人费解的功能:主函数末尾有一个无限的 for 循环。人们可能想知道为什么运行时中存在这样一个看似毫无意义的构造。目的:检测致命错误深入研究代码,很明显循环服务于错误处理的关键目的。当发生致命...
    编程 发布于2024-11-07
  • iostream 与 iostream.h:在现代 C++ 中应该使用哪个?
    iostream 与 iostream.h:在现代 C++ 中应该使用哪个?
    iostream 和 iostream.h 之间的区别在 C 中,程序员可能会遇到两个具有类似目的的术语:iostream 和 iostream.h 。本指南旨在阐明两者之间的根本区别。iostream.h:已弃用的旧版本iostream.h 是 C 库中的一个头文件,它提供一组输入/输出函数。对于...
    编程 发布于2024-11-07
  • VLONE Clothing:重新定义都市时尚的街头服饰品牌
    VLONE Clothing:重新定义都市时尚的街头服饰品牌
    VLONE 是少数几个在快速变化的市场中取得超越街头服饰行业所能想象的成就的品牌之一。 VLONE 由 A$AP Mob 集体的电影制片人之一 A$AP Bari 创立,现已发展成为一个小众项目,有时甚至成为都市时尚界的国际知名品牌。 VLONE 凭借大胆的图案、深厚的文化联系和限量版发售,在时尚界...
    编程 发布于2024-11-07
  • 如何使用PDO查询单行中的单列?
    如何使用PDO查询单行中的单列?
    使用 PDO 查询单行中的单列处理针对单行中特定列的 SQL 查询时,通常需要检索直接取值,无需循环。要使用 PDO 完成此操作,fetchColumn() 方法就派上用场了。fetchColumn() 的语法为:$col_value = $stmt->fetchColumn([column_...
    编程 发布于2024-11-07
  • 我是如何构建 PeerSplit:一款免费的点对点费用分摊应用程序 — 从构思到发布仅需数周时间
    我是如何构建 PeerSplit:一款免费的点对点费用分摊应用程序 — 从构思到发布仅需数周时间
    我构建了 PeerSplit——一个免费的、点对点的 Splitwise 替代品——从想法到发布仅用了两周时间! PeerSplit 是一款本地优先的应用程序,用于分配团体费用。它可以离线工作,100% 免费且私密,不需要注册或任何个人数据。 以下是我如何构建它以及我在此过程中学到的一切。 ...
    编程 发布于2024-11-07

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3