SVG—初识5之SVG变形动画和阶段性学习成果展示

news/2024/11/15 3:17:34/

SVG—初识5

  • SVG 变形动画
    • MorphSVGPlugin
      • 多个变换
      • 蒙版动画
  • 阶段性学习成果

SVG 变形动画

在做形状转换的时候,转换前形状的控制点和转换后的控制点数最好相同,这样效果能好些

MorphSVGPlugin

GreenSock 中使用MorphSVGPlugin进行动画的绘制

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<svg version="1.1" id="&#x56FE;&#x5C42;_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"y="0px" viewBox="0 0 1920 1080" style="enable-background:new 0 0 1920 1080;" xml:space="preserve">
<!--    五角星--><path d="M185,1.12977573 L128.163889,116.292316 L1.07448057,134.759488 L93.0372403,224.401023 L71.3277776,350.976903 L185,291.215879 L298.672222,350.976903 L276.96276,224.401023 L368.925519,134.759488 L241.836111,116.292316 L185,1.12977573 Z" id="star" fill="#4af"></path>
<!--十边形--><path d="M160,0 L258.885438,32 L320,110.557281 L320,210.424346 L258.885438,289.442719 C217.122754,309.81424 184.160941,320 160,320 C135.839059,320 102.877246,309.81424 61.1145618,289.442719 L0,210.424346 L0,110.557281 L61.1145618,32 L160,0 Z" id="decagon" fill="transparent"></path>
</svg>
</body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.1/gsap.min.js"></script>
<script src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/MorphSVGPlugin3.min.js"></script>
<script>let tl=gsap.timeline({repeat: -1,yoyo: true,repeatDelay: 0.3,defaults:{duration: 3}})tl.to("#star",{morphSVG: "#decagon"}).timeScale(3)
</script>
</html>

请添加图片描述

多个变换

多个图形之间的变换只需通过 GSAP 中到 timeline 实例追加变换规则就可以实现:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<svg version="1.1" id="&#x56FE;&#x5C42;_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"y="0px" viewBox="0 0 1920 1080" style="enable-background:new 0 0 1920 1080;" xml:space="preserve">
<!--    五角星--><path d="M185,1.12977573 L128.163889,116.292316 L1.07448057,134.759488 L93.0372403,224.401023 L71.3277776,350.976903 L185,291.215879 L298.672222,350.976903 L276.96276,224.401023 L368.925519,134.759488 L241.836111,116.292316 L185,1.12977573 Z" id="star" fill="#4af"></path>
<!--十边形--><path d="M160,0 L258.885438,32 L320,110.557281 L320,210.424346 L258.885438,289.442719 C217.122754,309.81424 184.160941,320 160,320 C135.839059,320 102.877246,309.81424 61.1145618,289.442719 L0,210.424346 L0,110.557281 L61.1145618,32 L160,0 Z" id="decagon" fill="transparent"></path>
<!--    矩形--><rect id="rect" width="319" x="0.5" y="0.5" fill="none" height="319"></rect>
</svg>
</body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.1/gsap.min.js"></script>
<script src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/MorphSVGPlugin3.min.js"></script>
<script>var tl=gsap.timeline({repeat: -1,repeatDelay: 0.3,yoyo: true,defaults:{duration: 0.6}})tl.to("#star",{morphSVG: "#decagon"},"+=1").to("#star",{morphSVG:"#rect"},"+=1")
</script>
</html>

请添加图片描述

蒙版动画

结合 SVG 中的 clipPath 可以轻松实现一个带有蒙版效果的动画

DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style>#stars {visibility: hidden;}</style>
</head>
<body>
<svg version="1.1" id="&#x56FE;&#x5C42;_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"y="0px" viewBox="0 0 1920 1080" style="enable-background:new 0 0 1920 1080;" xml:space="preserve"><!--十边形--><path d="M160,0 L258.885438,32 L320,110.557281 L320,210.424346 L258.885438,289.442719 C217.122754,309.81424 184.160941,320 160,320 C135.839059,320 102.877246,309.81424 61.1145618,289.442719 L0,210.424346 L0,110.557281 L61.1145618,32 L160,0 Z" id="decagon" fill="transparent"></path><!--    矩形--><rect id="rect" width="319" x="0.5" y="0.5" fill="none" height="319"></rect><defs><clipPath id="mask"><!--    五角星--><path d="M185,1.12977573 L128.163889,116.292316 L1.07448057,134.759488 L93.0372403,224.401023 L71.3277776,350.976903 L185,291.215879 L298.672222,350.976903 L276.96276,224.401023 L368.925519,134.759488 L241.836111,116.292316 L185,1.12977573 Z" id="star" fill="none"></path></clipPath></defs><image width="500" height="500" xlink:href="https://picsum.photos/500" clip-path="url(#mask)"></image>
</svg>
</body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.1/gsap.min.js"></script>
<script src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/MorphSVGPlugin3.min.js"></script>
<script>MorphSVGPlugin.convertToPath("circle");let tl = gsap.timeline({repeat: -1,yoyo: true,repeatDelay: 0.3,defaults: {duration: 3}})tl.to("#star", { morphSVG: "#decagon" }).to("#star",{morphSVG:"#rect"}).timeScale(3);
</script>
</html>

请添加图片描述

阶段性学习成果

路径动画、描边动画和变形动画的整个demo演示

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style>#road{stroke-dasharray: 600;stroke-dashoffset: 600;animation: offset 20s linear infinite;}@keyframes offset {to{stroke-dashoffset: 0;}}</style>
</head>
<body>
<svg width="960" height="500" viewBox="0 0 960 500" style="background-color: #0E2439"><g id="first" ><!--A--><path id="A"  stroke="#63ebfa" fill="#63ebfa" d="M200.9189,190.6057c-.1572-.3677-.519-.606-.9189-.606s-.7617,.2383-.9189,.606l-12,28c-.2178,.5078,.0176,1.0957,.5249,1.313,.5083,.2188,1.0962-.0176,1.313-.5249l2.6202-6.1138h16.9216l2.6202,6.1138c.1621,.3789,.5312,.6064,.9194,.6064,.1313,0,.2651-.0264,.3936-.0815,.5073-.2173,.7427-.8052,.5249-1.313l-12-28Zm-8.5226,20.6743l7.6037-17.7417,7.6037,17.7417h-15.2074Z"/>
<!--         <path id="A" fill="transparent" stroke="#00a4ff" d="m38.7,6.3C38.3,5.5,37.6,5,36.8,5s-1.6,0.5-1.9,1.3L10.2,65.7c-0.4,1.1,0,2.3,1.1,2.8c1,0.5,2.3,0,2.7-1.1l5.4-13h34.9-->
<!--               l5.4,13c0.3,0.8,1.1,1.3,1.9,1.3c0.3,0,0.5-0.1,0.8-0.2c1-0.5,1.5-1.7,1.1-2.8C63.4,65.7,38.7,6.3,38.7,6.3z M21.1,50.2l15.7-37.6-->
<!--               l15.7,37.6C52.4,50.2,21.1,50.2,21.1,50.2z"/>--><!--B--><path id="B" stroke="#00a4ff"  style="display: none"d="M210.8259,198.022c0-4.3979-3.5781-7.9761-7.9761-7.9761h-10.6758c-.5522,0-1,.4478-1,1v27.9082c0,.5522,.4478,1,1,1h10.6758c4.3979,0,7.9761-3.5781,7.9761-7.9761,0-2.9995-1.666-5.6177-4.1216-6.978,2.4556-1.3604,4.1216-3.9785,4.1216-6.978Zm-2,13.9561c0,3.2954-2.6807,5.9761-5.9761,5.9761h-9.6758v-11.9482h9.6758c3.2954,0,5.9761,2.6792,5.9761,5.9722Zm-5.9761-7.9839c-.0206,0-.0378,.0105-.058,.0117h-9.6177v-11.96h9.6758c3.2954,0,5.9761,2.6807,5.9761,5.9761,0,3.293-2.6807,5.9722-5.9761,5.9722Z" fill="none"/><!--style="display: none"--><!--C--><path id="C" stroke="#00a4ff"  fill="none" style="display: none"   d="M200.6819,190c2.2046,0,4.3257,.8042,5.9727,2.2642,.4131,.3672,1.0464,.3281,1.4116-.0845,.3667-.4136,.3286-1.0454-.0845-1.4121-2.0137-1.7847-4.606-2.7676-7.2998-2.7676-6.0654,0-11,4.9346-11,11v8c0,6.0654,4.9346,11,11,11,2.6943,0,5.2866-.9829,7.2998-2.7676,.4131-.3662,.4512-.998,.0845-1.4116-.3662-.4126-.999-.4521-1.4116-.0845-1.6465,1.4595-3.7676,2.2637-5.9727,2.2637-4.9624,0-9-4.0376-9-9v-8c0-4.9624,4.0376-9,9-9Z"/><circle id="circle" cx="200" cy="200" r="70" style="fill: none;stroke-width: 3;stroke: mediumpurple;"></circle><circle id="circle1" cx="200" cy="200" r="50" style="fill: none;stroke-width: 3;stroke: yellowgreen;"></circle><!--         <circle  cx="200" cy="200" r="120" style="fill: none;stroke-dasharray: 20;stroke: #44aaff;"></circle>--><path id="road" style="fill: none;stroke-dasharray: 20;stroke: #44aaff;"   d="M198.5,80c33.8,0,65.574,12.437,89.469,35.02C311.849,137.589,325,167.591,325,199.5s-13.151,61.911-37.031,84.48C264.074,306.563,232.3,319,198.5,319s-65.574-12.437-89.469-35.02C85.151,261.411,72,231.409,72,199.5s13.151-61.911,37.031-84.48C132.926,92.437,164.7,80,198.5,80 M198.5,79C128.084,79,71,132.95,71,199.5S128.084,320,198.5,320S326,266.05,326,199.5S268.916,79,198.5,79L198.5,79z"/><!--         <path id="biking-road" style="fill:none;stroke:#000000;stroke-miterlimit:10;stroke-dashoffset: 10;stroke-dasharray: 10;stroke:#4af;" d="M71.5,154.5c19.944,33.545,51.705,52.349,79,47-->
<!--	c16.142-3.163,27-14,27-14c22.186-22.141,13.674-57.487,21-59c10.209-2.108,22.412,67.432,43,69c30.372,2.313,53.208-145.267,82-144-->
<!--	c30.598,1.347,29.726,169.119,70,176c21.385,3.654,55.033-37.943,110-183"/>--></g><g id="zhuangShi"><path id="xiu" style="fill:none;stroke: hotpink;stroke-width: 3;" d="m50,350 10,15 5,-10 8,10 10,-10 10,10 10,-15"></path><path id="xiu1" style="fill:none;stroke: yellow;stroke-width: 3;" d="m350,100 10,15 5,-10 8,10 10,-10 10,10 10,-15"></path><circle id="circle" cx="60" cy="60" style="fill: none;stroke: lawngreen;" r="5"></circle><circle id="circle" cx="350" cy="80" style="fill: none;stroke: rgb(255,250,145);" r="5"></circle><circle id="circle" cx="60" cy="60" style="fill: none;stroke: lawngreen;" r="5"></circle><circle id="shi" cx="300" cy="350" style="fill: rgb(253,82,82);" r="5"></circle><circle id="li" cx="400" cy="250" style="fill: pink;" r="5"></circle></g></svg>
<svg id="person-biking" x="0" y="0" viewBox="0 0 72 72" version="1.1" width="72" height="72" xmlns="http://www.w3.org/2000/svg"><g><g id="color"/><g id="hair"/><g id="skin"><circle cx="34.3857" cy="11.0625" r="2.9687" fill="yellow" stroke="none"/><polyline fill="yellow" stroke="none" points="34.3857,20.9248 36.417,18 40.25,18.084 46.457,32.2344 44.417,36 41.8896,38.5137 38.7705,49.668 35.3643,56.418 32.96,54.3809 33.8789,47.3027 30.1084,40.3262 30.2051,37 38.25,32 35.3643,24.5"/></g><g id="skin-shadow"/><g id="line"><circle cx="34.3857" cy="11.0625" r="2.9687" fill="none" stroke="orange" stroke-miterlimit="10" stroke-width="2"/><path fill="none" stroke="orange" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" d="M26.333,28.083l4.2705-2.9473c0.9053-0.6245,2.1602-1.875,2.7871-2.7783l1.8858-2.7148c0.6269-0.9033,2.0029-1.6236,3.0576-1.6006 c1.0537,0.0229,2.2773,0.8662,2.7197,1.8735l4.5996,10.4868c0.4424,1.0079,0.375,2.6231-0.1494,3.5909l-0.1338,0.248 c-0.5244,0.9678-1.7803,2.1143-2.79,2.5498l-5.4922,2.3633c-1.0098,0.4355-1.4922,1.6221-1.0713,2.6387l2.6348,6.3593 c0.4209,1.0166,0.0908,2.2979-0.7344,2.8477c-0.8252,0.5498-1.9277,0.208-2.4512-0.7598l-4.4062-8.1543 c-0.5235-0.9677-0.9297-2.5078-0.9033-3.4228c0.0273-0.9151,0.8134-2.1377,1.747-2.7188l4.6485-2.8886 c0.9336-0.5811,1.4795-1.9287,1.2128-2.9961L36.25,24"/><circle cx="20.084" cy="52" r="10.166" fill="none" stroke="orange" stroke-miterlimit="10" stroke-width="2"/><circle cx="52.084" cy="52" r="10.166" fill="none" stroke="orange" stroke-miterlimit="10" stroke-width="2"/><polyline fill="none" stroke="orange" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" points="20.25,52 22.25,28 26,28"/><path fill="none" stroke="orange" stroke-miterlimit="10" stroke-width="2" d="M37.9785,50.959l-0.9844,3.1328 C36.6641,55.1416,35.5742,56,34.5723,56c-1.002,0-1.7071-0.8926-1.5655-1.9834l0.8692-6.7178"/><line x1="42.4072" x2="38.7705" y1="36.8652" y2="48.4395" fill="none" stroke="orange" stroke-miterlimit="10" stroke-width="2"/></g></g>
</svg></body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.1/gsap.min.js"></script>
<script src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/DrawSVGPlugin3.min.js"></script>
<script src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/MorphSVGPlugin3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.2.6/MotionPathPlugin.min.js"></script>
<script>let tl=gsap.timeline({repeat: -1})let bian=gsap.timeline({repeat: -1})let bian1=gsap.timeline({repeat: -1})let yuan=gsap.timeline({repeat: -1})let dian=gsap.timeline({repeat: -1})let zimu = gsap.timeline({repeat: -1,yoyo: true,repeatDelay: 1,defaults: {duration: 5}})tl.fromTo("#circle",{drawSVG :"0%"},{duration:2,drawSVG: "100%",stagger:0.1}).fromTo("#circle",{drawSVG: "100%"},{duration: 2,drawSVG:"0%",stagger: 0.1}).fromTo("#circle",{strokeDashoffset :"0%",strokeDasharray:"0%"},{duration:15,strokeDashoffset: "100%",stagger:0.1,strokeDasharray:"50%"})bian.fromTo("#xiu",{drawSVG: "0%"},{duration: 2,drawSVG:"100%",stagger: 0.1}).fromTo("#xiu",{drawSVG: "100%"},{duration: 2,drawSVG:"0%",stagger: 0.1})bian1.fromTo("#xiu1",{drawSVG: "100%"},{duration: 2,drawSVG:"0%",stagger: 0.1}).fromTo("#xiu1",{drawSVG: "0%"},{duration: 2,drawSVG:"100%",stagger: 0.1})yuan.fromTo("#shi",{fill: "red"},{duration: 2,fill:"yellow",stagger: 0.1})dian.fromTo("#li",{fill: "pink"},{duration: 2,fill:"purple",stagger: 0.1})zimu.to("#A", { morphSVG: "#B" }).to("#A",{morphSVG: "#C"}).timeScale(3);gsap.registerPlugin(MotionPathPlugin);gsap.to("#person-biking",{duration: 6,repeat: -1,ease: Linear.easeNone,motionPath:{path: "#road",align: "#road",autoRotate: true,alignOrigin: [0.5, 0.5]}})
</script>
</html>

请添加图片描述


http://www.ppmy.cn/news/171315.html

相关文章

L310

Facelift( 紧肤术) followed by a week on a beach in Thailand? Hip surgery with a side of shopping inSingapore? Over the last 10 years, Asia’s rise on the medical tourism scene has been quick. Eastern nationsdominate the global scene. Now Bali wants a sli…

基于嵌入式单片机的 STM32F103系列的 《语音识别模块 HBR640 和 DY-SV17F 》的驱动应用

语音识别模块HBR640 就近需要做一个有关语音交互的小项目&#xff0c;这个年代挺好&#xff0c;不用自己写识别算法&#xff0c;直接用芯片就好了&#xff0c;于是乎上网找芯片去了。网友们都说快速开发而且要求不高的话用LD3320芯片还可以&#xff0c;不仅便宜&#xff0c;识别…

LogicFlow自定义业务节点

&#x1f384;Hi~ 大家好&#xff0c;我是小鑫同学&#xff0c;一位长期从事前端开发的编程爱好者&#xff0c;我将使用更为实用的案例输出更多的编程知识&#xff0c;同时我信奉分享是成长的唯一捷径&#xff0c;在这里也希望我的每一篇文章都能成为你技术落地的参考~ 目录 1.…

STM32驱动LD3320进行语音识别程序+原理图

一、原理图 二、源代码 LD3320.c #include "ld3320.h" #include "delay.h" #include "usart.h" #include "string.h" u8 ld3320Data; extern u8 nAsrStatus;unsigned long nMp3StartPos0; unsigned long nMp3Size0; unsigned long …

A_A02_003 ST-LINK驱动安装

A_A02_003 ST-LINK驱动安装 一、驱动下载二、交流学习三、驱动安装步骤四、检测是否成功安装五、驱动更新六、注意事项 一、驱动下载 网盘下载 戳它跳转 提取码&#xff1a;osjy 其他所有资料获取 直戳获取 二、交流学习 安装过程如有疑问&#xff0c;可留言或者私聊交流 三…

SpringData 基础篇

Spring Data 故事背景一&#xff1a;基础概念1.1 什么是SpringData1.2 为什么要用SpringData 二&#xff1a;JPA与Hibernate、MyBatis关系2.1 JPA与JDBC2.1.1 特点2.1.2 JPA规范提供2.1.3 JDBC的不足 2.2 Hibernate与JPA2.2.1 关系 2.3 mybatis 和Hibernate 三&#xff1a;Hibe…

预约直播|揭秘鸿蒙全新流量阵地,元服务带来的体验变革

【导读】 在PC 互联网到移动互联网的演进过程&#xff0c;随着人们对交互和信息获取的智能化要求越来越高&#xff0c;移动终端上的应用生态发展到今天也面临着变革。传统厚重的App&#xff0c;功能齐全&#xff0c;但开发成本高、周期长&#xff0c;且存在搜索、安装、卸载等…

realme X50 5G 打开USB调式步骤

进入"设置", 点击关于手机点击"版本信息(基带,内核版本等)"连续点击7次"版本号"即打开"USB调试模式"(锁屏密码开启的需要输入密码)在"设置"中找到"其他设置", 并点击进入找到并点击"开发者选项"找到并打…