《SVG 动画开发实战》 - SVG 描边动画(Stroke)

✏️ SVG 描边动画(Stroke)

演示

查看在线版本

原理

要实现上面酷炫的描边动画,首先我们需要了解 SVG 中实现描边动画的三个相关属性:分别是 strokestroke-dasharraystroke-dashoffset。这三个属性作为外观显示属性,都可以作为 CSS 属性来使用。

stroke

SVG 中的 stroke 属性用来控制绘制描边的方式,我们也可以使用 CSS 来控制 SVG 的描边样式。

https://codepen.io/xiaoluobod...

stroke-dasharray

我们知道在 CSS 中实现虚线边框,要使用 border: 1px dashed #f4a; ;在 SVG 中要实现虚线效果就要使用 stroke-dasharray 属性。

https://codepen.io/xiaoluobod...

stroke-dashoffset

stroke-dashoffset 属性用来指定路径从开始位置的偏移量。通过指定偏移量会让绘制好的线偏移

原来的位置一段空白

https://codepen.io/xiaoluobod...

动起来

那么结合上面三个属性,我们试着动态改变 stroke-dashoffset 属性,看看会发生什么。通过动态改变偏移量属性,结合设定好的 width 以及 stroke-dasharray 属性,会让原来静态的线有一种用画笔描绘出来的效果。

https://codepen.io/xiaoluobod...

实战

下面我们使用 GreenSock 实现描边效果,GreenSock 提供了 DrawSVGPlugin 用于控制各种图形的描边效果,原理主要是通过控制上面学过的 stroke-dasharraystroke-dashoffset 两个CSS属性来实现动画效果。

获取 SVG 代码

这里就使用 vivus 中的 Hi There 动画 作为 Demo,打开 vivus 官网,打开开发者工具,这里使用的是 Chrome,选中 Hi There dom 元素,可以看到 Hi There 的 SVG 代码。我们选中元素右键复制出来。

chapter5-3

得到如下代码:

分析动画时间轴

仔细观察 vivus 中的 Hi There 的描边动画中一共有四个阶段:

  1. 先描边一个 Hi 字母的圆点
  2. 然后描边 Hi 字母
  3. 再描边 Hi 字母的 3D 边框
  4. 最后描边 there 单词

我们给要描边的图形,例子中会涉及到 pathpolylineline 等定义好 class,用于选择。将无用 vivus 属性去掉,优化后的代码如下:

实现动画

GreenSock 提供了 timeline 用于创建连续的错开补间动画,很好理解,动画是按时间轴有序进行的。

借助 DrawSVGPlugin 实现了将 SVG path 从 0% 绘制到 100% 的动画效果。

// 创建时间轴
let tl = gsap.timeline({ repeat: -1 })

/**
 * 1、先描边一个 Hi 字母的圆点
 * 2、然后描边 Hi 字母
 * 3、再描边 Hi 字母的 3D 边框
 * 4、最后描边 there 单词
 */
tl
  .fromTo(
    '.hi-o',
    { drawSVG: "0%" },
    { duration: .3, drawSVG: "100%", stagger: 0.1 },
  )
  .fromTo(
    '.hi',
    { drawSVG: "0%" },
    { duration: 3, drawSVG: "100%", stagger: 0.2 },
  )
  .fromTo(
    '.threedline',
    { drawSVG: "0%" },
    { duration: 0.8, drawSVG: "100%" },
    "+=0.2"
  )
  .fromTo(
    '.there',
    { drawSVG: "0%" },
    { duration: 2, drawSVG: "100%", stagger: 0.5 }
  )

最终效果:

https://codepen.io/xiaoluobod...

参考

关于

本文是《SVG 动画开发实战》 系列文章第五章。

Notion 版本

小册是在 Notion 上完成撰写的,所以我保留了 Notion 的分享版本,你也可以点击这里查看。

GitHub 版本

小册提供了 GitHub 版本的在线阅读体验,传送门

微信公众号版本

关注我的技术公号,同样也可以找到此小册系列,目前在更新中。。。

xiaoluoboding

你可能感兴趣的:(svg,svg动画,animation,javascript)