svg动画的几种方式

这篇具有很好参考价值的文章主要介绍了svg动画的几种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在做的项目中有部分的svg需要做成动画,最开始的想法是转成gif,然后一看,啊,90M!!!实在不能忍,于是和设计妹纸一起研究起了svg动画,发现这玩意儿还是很好玩的,怎么让svg动起来,这是一个很有趣的话题。在目前的开发过程中,一共使用了三种方式,接下来就一一列举一下吧。如果有更好的方式,欢迎补充一起讨论

svg动画(animate)

svg有相关的动画SIML,可以直接使用,本来说已经被弃用了,后面又被开发者们捡了起来(相关历史也没来得及去深入了解,在这里就先留个口子吧)
常用的元素包括<animate>, <animateMotion>, <animateTransform>

  • <animate> 放置在形状元素的内部,用来定义元素某个属性什么时候怎么改变,跟css中的animate功能十分相似,可以简单理解为它的SIML形式
    这是一个svg的柱状图动画,这个动画的问题在于translateY的值需要手动去调整(原理是啥还没研究明白,有知道的朋友可以相互讨论一下)
    svg动画,生活实用小妙招,css3,动画,前端
<svg width="300" height="300" viewBox="0 0 300 300" fill="none" xmlns="http://www.w3.org/2000/svg" >
<rect width="300" height="300" fill="#000"/>
<g filter="url(#filter0_i_242_64122)" transform="scale(1,-1) translate(0,-515)">
<rect x="206" y="237" width="20" height="45" fill="green">
    <animate attributeName="height" from="0" to="45" dur="2s" repeatCount="indefinite" fill="freeze" />
    </rect>
</g>
<g filter="url(#filter1_i_242_64122)" transform="scale(1,-1) translate(0,-460)">
<rect x="86" y="182" width="20" height="100" fill="green">
    <animate attributeName="height" from="0" to="100" dur="2s" repeatCount="indefinite" fill="freeze" />
    </rect>
</g>
<g filter="url(#filter2_i_242_64122)" transform="scale(1,-1) translate(0,-485)">
<rect x="146" y="207" width="20" height="75" fill="green">
    <animate attributeName="height" from="0" to="75" dur="2s" repeatCount="indefinite" fill="freeze" />
    </rect>
</g>
  • <animateMotion>定义了一个元素如何沿着运动路径移动。svg有个很灵活的元素:<path>,在此就不继续展开,我的理解是,只要参数设置的好,<path>就能生成任何你想要的图形。如此灵活的元素在进行动画操作时,需要进行一些特殊的操作
  • <animateTransform>·变动了元素上的一个变形属性,使动画可以转换,缩放,旋转或斜切。可以简单理解为css中transform,transition的SIML形式
    在使用这个属性的时候需要注意,跟css的transform一样,变形的顺序不同可能会出现不一样的结果,所以需要提前计算好变换的距离
    个人觉得这种形式比使用CSS动画更加灵活,特别是用于<path>的动态处理,这是CSS动画较难做到的,缺点是属性比较多,会有一丢丢的学习成本(只有一丢丢)

CSS动画

svg本身也是XML的形式,所以可以非常丝滑的使用CSS动画,同样的,在元素里加上class或者style就可以直接使用了,这里就不过多阐述

Lottie

设计师经常使用AE进行动画创作,然后输出json格式的数据,使用Lottie可以十分顺滑的将json数据转化为动画(web端配合lottie-web使用)。Lottie使用起来十分的丝滑,完全无惧,但缺点是lottie包有一定的体积,如果使用的是小动画,如此大的体积有些划不来,动画多,或者有些动画使用css难以达到类似效果时可以使用。
它的原理是使用lottie-web包,将json数据渲染为svg(所以打开控制台,看到的对应元素是svg),这样没有意外的话能基本还原设计师的创作(毕竟直接用他们画的动画,😁😁😁)文章来源地址https://www.toymoban.com/news/detail-626039.html

到了这里,关于svg动画的几种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vector容器删除元素的几种简单方法(详细实用)

    (1)使用 vector库函数“erase”删除 , 使用erase函数后容器size自动-1 (2)使用 vector库函数“swap和pop_back()\\\" ,由于 pop_back删除的是最后一个元素 ,所以先移位再删除 如果从数组的角度理解,因为数组存储的内容 在地址上是连续的 ,要移除目标元素,就没有库函数可以使用,

    2023年04月16日
    浏览(50)
  • WinXP打不开网上邻居的几种实用处理方法

    小编的好友说之前能通过网上邻居浏览别人的共享文件,不知道怎么了,最近一直无法打开网上邻居.提示“此工作组的服务器列表当前无法使用”,重启几次都无法解决.是什么原因. 一些软件的开机加速优化会建议禁止“Gomputer Browser(计算机列表)”这个服务,没有这个服务就可能

    2024年02月06日
    浏览(45)
  • 生活小妙招之UE custom Decal

    因为这几年大部分时间都在搞美术,所以博客相关的可能会鸽的比较多,阿巴阿巴 https://twitter.com/Tuatara_Games/status/1674034744084905986 之前正好看到一个贴花相关的小技巧,正好做一个记录,也在这个的基础上做一些小的拓展。没啥难度,但倒觉得是个值得记录的点。 首先,和

    2024年02月13日
    浏览(34)
  • redis的几种集群方式

    https://www.zhihu.com/people/pan-zhi-74-31 Redis集群介绍Redis集群一般有四种方式,分别为:主从复制、哨兵模式、Cluster以及各大厂的集群方案。在3.0版本之前只支持单实例模式,3.0之后支持了集群方式。在3.0之前各大厂为了解决单实例Redis的存储瓶颈问题各自推出了自己的集群方案,

    2024年02月05日
    浏览(36)
  • 串口监控的几种方式

    目录 方法1. 使用usb转TTL模块硬件监控; 方法2. 使用JLINK的SWD接口的串口收发脚进行硬件监控; 方法3. 使用虚拟串口进行软件监控; 方法1. 使用usb转TTL模块硬件监控; 方法2. 使用JLINK的SWD接口的串口收发脚进行硬件监控; 吃水不忘挖井人: Jlink v9虚拟串口功能,不用再单独购

    2024年02月06日
    浏览(46)
  • 常见的几种排序方式

    排序: 所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作 稳定性: 假定在待排序的记录序列中,存在多个具有相同的的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在

    2024年02月07日
    浏览(48)
  • python的几种输出方式

    1.输出百分比方法 2. print(f “{}”) 的用法 3. .format格式   4. 加号拼接(针对字符串) 扩展知识 -格式化输出 字符 含有 %s 字符串 %d 有符号十进制整数,%06d表示输出的整数显示位数字,不足的地方使用0补全 %f 浮点数,%.02f表示小数点后只显示两位 %% 输出%  %s:代表字符串的占

    2024年04月15日
    浏览(52)
  • 创建线程的几种方式

    线程和进程的区别: 进程是操作系统进行资源分配的最小单元。 线程是操作系统进行任务分配的最小单元,线程隶属于进程。 如何开启线程? 1、继承Thread类,重写run方法。 2、实现Runnable接口,实现run方法。 3、实现Callable接口,实现call方法。通过FutureTask创建一个线程,获

    2024年02月03日
    浏览(58)
  • 【100个 Unity实用技能】☀️ | C# 检查字典中是否存在某个Key的几种方法

    老规矩,先介绍一下 Unity 的科普小知识: Unity 是 实时3D互动内容创作和运营平台 。 包括 游戏开发 、 美术 、 建筑 、 汽车设计 、 影视 在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和

    2023年04月08日
    浏览(49)
  • 实现跨域的几种方式

    前后端的分离导致了跨域的产生  跨域的三要素:协议 域名 端口 三者有一个不同即产生跨域 例如: http ://www.csdn.com https ://www.csdn.com 由于协议不同,端口不同而产生跨域 注:http的默认端口80,https的默认端口443 跨域的解决方案 前端:webpack proxy,jsonp,ngix反向代理,webpac

    2024年02月13日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包