SVG技术入门:线条动画实现原理

摘要:
我相信每个人都见过这样一种神奇的技术:由线条组成的绘画可以自动绘制自己。Jake Archibald是这种SVG技术的先驱,他写了一篇非常好的文章来描述它是如何实现的。我们使用CSS来设置这些路径的样式,并将其更改为虚线。您看到的大多数SVG线条动画都使用JavaScript。

相信大家都见到过这样神奇的技术:一副线条构成的画能自动画出自己。非常的酷。Jake Archibald是这种SVG技术的首创者,并且写了一篇非常好的文章来描述它是如何实现的。Brian Suda也在24 Ways网站上讨论过它。 Polygon使用它在一篇设计方面的文章里创造出了非常神奇的效果。Codrops也做出了一些非常漂亮的例子

其实我没有什么好增补的,只是想把这种技术说的更明白些,所以,在这里我要用我的方式把这种技术再讲解一遍。

1. 你有一个SVG图形

SVG技术入门:线条动画实现原理第1张

2. 这个图形必须要有一个线条(stroke)属性

SVG技术入门:线条动画实现原理第2张

3. 线条可以是虚线

我们可以用Illustrator制作,也可以用编程实现。我们用CSS来设置这些路径的样式(假定我们这里是inline SVG,或通过一个<object>),把它们变成虚线形式。

<svg ...>    <path class="path" stroke="#000000" ... >  </svg>
.path {
  stroke-dasharray: 20;
}

这是让虚线里的每个小线段长度为20px。

SVG技术入门:线条动画实现原理第3张

4. 可以让虚线小段的长度变得更长….

.path {
  stroke-dasharray: 100;
}

SVG技术入门:线条动画实现原理第4张

5. 我们还可以给我们的线条设置”offset”偏移量,这样会导致虚线里的小线段的位置发生移动。

当我们动态设置图形中线条的“offset”值时,可以看到这个效果:

SVG技术入门:线条动画实现原理第5张
可以这样简单的实现:

.path {
  stroke-dasharray: 100;
  animation: dash 5s linear;
}

@keyframes dash {
  to {
    stroke-dashoffset: 1000;
  }
}

6. 想象,当虚线的小线条足够长,超过图形的整个线条长度时

没有什么变化,整个图像看起来完全不是虚线。你只需要将stroke-dasharray属性设置的足够长,超过整个线条的长度。

7. 现在给线条设置偏移量,让它不再覆盖整个图形。

这样你就看不见图形了。

8. 现在动态的慢慢将线条的偏移量设置回归到0

SVG技术入门:线条动画实现原理第6张
如果通过CSS,你需要将animation属性设置成forwards,这样整个动画就会停止在它的最终状态。

.path {
  stroke-dasharray: 1000;
  stroke-dashoffset: 1000;
  animation: dash 5s linear forwards;
}

@keyframes dash {
  to {
    stroke-dashoffset: 0;
  }
}

Tada!

实例演示

为什么要用JavaScript?

大部分你看到的SVG线条动画都使用了JavaScript。这是因为在现实情况中你很难知道线条有多长。我们这里设置的是1000,是因为它碰巧是1000。

用JavaScript获取长度值的写法是这样的:

var path = document.querySelector('.path');
var length = path.getTotalLength();

然后你就可以随便使用这个值了。文本顶部链接的那些文章讲的都比本文透彻,你最好还是参考一下那些文章。我只想简单的讲一下这种技术方法,希望它能给你一些启示。

(英文:How SVG Line Animation Works.)

免责声明:文章转载自《SVG技术入门:线条动画实现原理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java系统属性与Preferences API的简单介绍pgsql数据库分页排序问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

安卓手机屏幕投射到电脑以及一台电脑控制多台手机技术原理浅析

奥创软件研究院推出的奥创群控让越来越多的人了解到了电脑控制手机的操作。自奥创软件研究院首家发布电脑批量控制手机的解决方案以来,有很多人开始探讨电脑控制手机技术在实际工作中的应用。 由于市场太大,仅靠奥创软件研究院一家也是做不过来的,现在将手机屏幕投射到到电脑的技术原理,以及一台电脑批量控制多台手机的技术(即所谓的手机反响控制)简单的给大家介绍下,在此抛砖引...

WPF动画速率效果

在WPF中使用动画的情况非常多,而要让动画变得生动往往要使用一些变速动画,WPF也内置了很方便的缓动函数来实现这一功能。 除此之外,WPF还有关键帧动画,利用关键帧动画能够很好的控制动画的细节,与美工的很多设计保持完美一致。关键帧动画中还有一套叫做样条关键帧动画(SplineKeyFrame),这个动画利用一个三次贝塞尔曲线能够更准确的控制动画的速率。 不...

SVG的几个标签元素

defssvg允许我们定义以后需要重复使用的图形元素。建议把所有需要再次使用的元素定义在defs元素里面。这样做可以增加svg内容的易读性和可访问性。在defs元素定义的元素不会直接呈现。你可以在你的视口的任意地方利用<use>元素呈现这些元素。 用法: 类别: 容器元素,结构元素 允许的内容物:任意数量、任意排序的下列元素:动画元素、描述性元...

解决Ubuntu开关机动画不正常方法

 联想的笔记本,显卡NVIDIA GT218M,默认使用开源的驱动,但挂起后,再唤醒就黑屏回不到桌面。 1、解决办法:安装NVIDIA专有驱动 $sudo apt-get install nvidia-current 新的问题:开机logo和开/关机动画均不正常,只显示文字logo 解决办法: 1、编辑 /etc/default/grub文件 $sudo...

H5动效的常见制作方法

动效制作手法1;gif图片 优势:节省成本;制作效率高。 动效制作手法2:逐帧动画 动效制作手法3:css3; 动效制作手法4:svg; 缺点不支持低版本的浏览器ie8及以下 知识普及:SVG,可缩放矢量图形(Scalable Vector Graphics), 是被存成了 XML 格式的图像, 特征: 1,可被多种工具读取和修改(比如记事本) ,2,尺寸...

CSS3动画的使用以及优化

CSS3 动画 目录 1. 定义动画2. animation 属性3. animation 属性的兼容4. animation与transition 属性的取别5. animate.css 动画库6. 动画的调试及优化 定义动画为了实现动画所以必须准备一个动画剧本: 1 /* 当动画只用两个关键帧时可以使用该方式定义关键帧 */ 2 @keyframe...