0

0

高效使用KUTE.js进行动画:第三部分,SVG动画化

王林

王林

发布时间:2023-08-29 12:33:16

|

1578人浏览过

|

来源于php中文网

原创

高效使用kute.js进行动画:第三部分,svg动画化

本系列的上一篇教程向您展示了如何使用 KUTE.js 对任何元素的不同 CSS 属性进行动画处理。但是,核心引擎不允许您对特定于 SVG 元素的属性进行动画处理。同样,您无法使用笔画对不同路径形状的 SVG 变形或不同 SVG 元素的绘制进行动画处理。您必须使用 KUTE.js SVG 插件来完成这些任务。

在开始之前,请记住,您必须包含 KUTE.js 核心引擎和 SVG 插件才能使本教程中的示例正常工作。

变形 SVG 形状

将一种 SVG 形状变形为另一种形状是您会遇到的一项非常常见的功能。 KUTE.js SVG 插件为我们提供了轻松创建自己的变形动画所需的一切。

使用此库可以通过三种方式变形 SVG 形状:

  1. 您可以使用 fromTo() 方法来指定元素的初始和最终 SVG 路径。
  2. 您还可以使用 to() 方法并避免指定初始路径。在这种情况下,变形的起始值将根据要变形的所选元素的 d 属性的值确定。
  3. 还有一个选项是将最终路径作为字符串直接传递给补间。这样,您就可以避免 SVG 中有两个不同的路径。
KUTE.fromTo('#shape-a', {path: '#shape-a' }, { path: '#shape-b' });
KUTE.to('#shape-a', { path: '#shape-b' });

KUTE.fromTo('#shape-a', {path: '#shape-a' }, { path: 'The path of #shape-b as a valid string.' });
KUTE.to('#shape-a', { path: 'The path of #shape-b as a valid string.' });

在初始化期间,库根据我们提供的路径对一些点进行采样。然后将这些点存储在两个不同的数组中。最后,这些数组用于插值。您可以配置许多选项来控制不同路径的变形行为。

  • morphPrecision:正如您可能已经猜到的,此选项允许您指定变形的精度或准确度。它被指定为一个数字,值越小精度越高。请记住,更高的精度会带来更高的准确度,但也会损害性能。当您处理 d 属性仅包含 hlv 的多边形形状或路径时,此选项不适用。在这种情况下,将使用原始多边形路径而不是采样新路径。
  • reverseFirstPath:您可以将此选项的值设置为 true 以反转第一个形状的绘制路径。它的默认值为 false
  • reverseSecondPath:您可以将此选项的值设置为 true 以反转第二个形状的绘制路径。它的默认值也是 false
  • morphIndex:有时,路径上的点在变形过程中可能需要覆盖很长的距离。您可以使用 morphIndex 参数控制此行为。指定后,此参数允许您旋转最终路径,使所有点都移动尽可能短的距离。

让我们利用到目前为止所学到的知识将电池图标变成书签图标。您应该注意,我使用小写的 l 来指定相对路径。这是所需的标记:



以下 JavaScript 创建补间对象并在单击按钮时启动动画:

var morphA = KUTE.to(
    '#battery-a', 
    { path: '#bookmark-a' },
    { duration: 5000 }
);

startButton.addEventListener(
  "click",
  function() {
    morphA.start();
  },
  false
);

这是一个演示,显示了上述代码的实际运行情况。我还添加了一个额外的元素,其中变形动画将 reverseFirstPath 设置为 true。这将帮助您了解不同配置选项对变形的总体影响。动画持续时间已设置为 5 秒,以便您可以仔细观察两个动画并发现差异。

在前面的示例中,主路径没有任何子路径。这使得变形变得非常简单。然而,情况可能并非总是如此。

让我们向书签添加一个额外的子路径以及电池图标。如果现在改变图标,您将看到只有第一个子路径有动画。第二个子路径在动画开始时消失并在动画结束时重新出现。在这种情况下,对所有子路径进行动画处理的唯一方法是将子路径更改为单独的路径。这是一个例子:




 





动画 SVG 笔画

另一种流行的与 SVG 相关的动画效果包括从无到有,然后使用 SVG 笔画绘制预定义的形状。这可用于对徽标或其他对象的绘制进行动画处理。在本节中,您将学习如何使用 KUTE.js 为 Font Awesome 自行车图标创建抚摸动画。

在 KUTE.js 中可以通过三种方式对 SVG 笔画进行动画处理。您可以通过将 fromTo 值设置为 0% 0%0% 100% 来设置从 0% 到 100% 的动画。您还可以通过将值设置为 0% 5%95% 100% 等值来绘制 SVG 形状的一部分。最后,您可以将结束值设置为0% 0%,以创建擦除效果而不是绘图效果。

这是我用来为自行车设置动画的 JavaScript 代码:

var wholeAnimation = KUTE.fromTo(
  "#icon",
  { draw: "0% 0%" },
  { draw: "0% 100%" },
  { duration: 10000}
);

var partialAnimation = KUTE.fromTo(
  "#icon",
  { draw: "0% 5%" },
  { draw: "95% 100%" },
  { duration: 10000}
);

var eraseAnimation = KUTE.fromTo(
  "#icon",
  { draw: "0% 100%" },
  { draw: "0% 0%" },
  { duration: 5000}
);

正如您在下面的示例中看到的,您无需担心路径内的多个子路径。 KUTE.js 单独为所有这些子路径设置动画,没有任何问题。动画持续时间用于确定最长路径的动画时间。然后根据其余子路径的长度确定其笔画持续时间。

工资查查移动工资条
工资查查移动工资条

大部分的工资还是以打印工资条的形式进行,偶有公司使用邮件发放工资条,而工资条的现代形式应该是移动工资条,以实现信息的备忘、到达、管理、对帐、环保、高效等需求……,用户已经习惯使用手机(或以其它移动方式)实现一切需求,应用的移动化是大势所趋。工资查查就在这样的背景下诞生,北京亦卓科技于2017的开发并推出了微信小程序工资查查。由于对有用户对数据隐私与安全性的考虑,北京亦卓科技在推出了云端应用--工资

下载

动画 SVG 变换

我们已经在本系列的第二个教程中学习了如何对 CSS 变换值进行动画处理。 KUTE.js SVG 插件还允许您使用 svgTransform 属性来旋转、平移、缩放或倾斜网页上的不同 SVG 元素。

rotate 属性接受确定旋转角度的单个值。默认情况下,旋转发生在元素的中心点周围,但您可以使用 transformOrigin 属性指定新的旋转中心。

translate 属性接受格式为 translate: [x, y]translate: x 的值。当提供单个值时,y 的值假定为零。

当倾斜元素时,您必须使用 skewXskewY。 SVG 中不支持 skew[x, y]。同样,scale 属性也只接受一个值。相同的值用于在 x 和 y 方向上缩放元素。

下面是一个代码片段,它将所有这些转换应用于矩形和圆形。

var rotation = KUTE.allTo(
  "rect, circle",
  { svgTransform: { rotate: 360 } },
  { repeat: 1, yoyo: true }
);

var scaling = KUTE.allTo(
  "rect, circle",
  { svgTransform: { scale: 1.5 } },
  { repeat: 1, yoyo: true }
);

var translation = KUTE.allTo(
  "rect, circle",
  { svgTransform: { translate: [100, -50] } },
  { repeat: 1, yoyo: true }
);

var skewing = KUTE.allTo(
  "rect, circle",
  { svgTransform: { skewX: 25 } },
  { repeat: 1, yoyo: true }
);

我已将 yoyo 参数设置为 true ,以便在反向播放动画后,变换属性将设置为其初始值。这样,我们就可以通过单击按钮来一次又一次地重播动画。

如果您在演示中按下旋转按钮,您会发现它似乎对圆圈没有任何影响。要观察圆的旋转,您必须对其应用倾斜变换以更改其形状,然后立即单击“旋转”。

最终想法

本教程首先介绍了 SVG 变形和描边动画的基础知识。您学习了如何正确变形具有子路径的复杂路径,以及如何通过为 draw 属性选择正确的值来创建擦除描边效果而不是绘图效果。之后,我们讨论了如何使用 svgTransform 属性来为不同的变换设置动画。

在各种教程中,我们已经看到 JavaScript 变得多么强大。它并非没有学习曲线,而且还有大量的框架和库可以让您忙碌起来。如果您正在寻找其他资源来学习或在工作中使用,请查看我们在 Envato Market 上提供的资源。

本教程旨在向您介绍 KUTE.js SVG 插件的所有功能并帮助您快速入门。您可以通过阅读文档了解有关 SVG 插件的更多信息。

相关专题

更多
js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

553

2023.06.20

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

374

2023.07.04

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

731

2023.07.04

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

477

2023.09.01

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

394

2023.09.04

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

990

2023.09.04

如何启用JavaScript
如何启用JavaScript

JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。

656

2023.09.12

Js中Symbol类详解
Js中Symbol类详解

javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。

551

2023.09.20

Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

0

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Pandas 教程
Pandas 教程

共15课时 | 0.9万人学习

Swoft2.x速学之http api篇课程
Swoft2.x速学之http api篇课程

共16课时 | 0.9万人学习

PHP基础入门课程
PHP基础入门课程

共33课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号