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

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

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

1. 你有一个SVG图形

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

3. 线条可以是虚线

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

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

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

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

.path {
  stroke-dasharray: 100;
}

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

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


可以这样简单的实现:

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

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

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

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

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

这样你就看不见图形了。

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


如果通过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.)

时间: 2024-10-24 22:10:16

SVG技术入门:线条动画实现原理的相关文章

SVG技术入门:如何画出一条会动的线

我喜欢用图画.图表来演示流程信息或浏览器的操作过程,但大量的图片有时候也会很不方便.在我的一个关于应用缓存和缓存方法的演讲中,我让屏幕首先空白,然后各种图表按照我的演讲内容自己一点一点的画出来.下面就是我如何用SVG技术在浏览器里实现这种效果的. SVG里的路径(path) SVG里用来定义路径的格式堪比正则表达式的怪异: <path fill="none" stroke="deeppink" stroke-width="14" strok

CSS3入门--线条动画特效实例

HTML: <div></div> CSS: div{ width: 200px; height: 200px; margin: 200px auto; background: #000; position: relative;-webkit-backface-visibility: hidden; backface-visibility: hidden;} div::after{ border-right: 1px solid #fff; border-left: 1px sol

线条之美,玩转SVG线条动画

线条之美,玩转SVG线条动画 作者:AlloyTeam www.alloyteam.com/2017/02/the-beauty-of-the-lines-break-lines-svg-animation/ 如有好文章投稿,请点击 → 这里了解详情 通常来说web前端实现动画效果主要通过下面几种方案: css动画:利用css3的样式效果可以将dom元素做出动画的效果来. canvas动画:利用canvas提供的API,然后利用清除-渲染这样一帧一帧的做出动画效果. svg动画:同样svg也提供

【Web动画】SVG 线条动画入门

CSS3 动画 javascript 动画(canvas) html 动画(SVG) 个人认为 3 种动画各有优劣,实际应用中根据掌握情况作出取舍,本文讨论的是我认为 SVG 中在实际项目中非常有应用价值 SVG 线条动画. 举个栗子 SVG 线条动画,在一些特定的场合下可以解决使用 CSS 无法完成的动画.尤其是在进度条方面,看看最近项目里的一个小需求,一个这种形状的进度条: 把里面的进度条单独拿出来,也就是需要实现这样一个效果: 脑洞大开一下,使用 CSS3 如何实现这样一个进度条呢. CS

SVG动画实践篇-无中生有的线条动画

git: https://github.com/rainnaZR/svg-animations/tree/master/src/pages/step2/path 说明 这个动画实现的是线条动画,主要用到的是 SVG 的 path 标签. <path> 标签命令 试用 <path> 标签的 d 属性标识路径集合,勾画线条的形状. M = moveto L = lineto H = horizontal lineto V = vertical lineto C = curveto S

HTML5 SVG简单的动态绘制轮廓线条动画插件

walkway是一款非常简单的HTML5 SVG动态绘制轮廓线条动画插件.它支持SVG的path,line 和 polyline元素.walkway使用起来简单方便,可以制作出非常酷的SVG线条动态绘制效果.更好的动态绘制线条插件可以参考:html5 svg线条动态绘制文字轮廓边框动画.HTML5 SVG图形轮廓线条绘制动画插件-vivus 和 html5 svg线条动态绘制iphone边框动画效果. 在线演示:http://www.htmleaf.com/Demo/201501261282.h

HTML5 SVG图形轮廓线条绘制动画插件-vivus

Vivus是一款可以执行SVG路径动画的轻量级Javascript库.Vivus可以绘制SVG图形的外观.通过该svg路径动画插件,你可以使用同步或异步的方式来执行SVG图像路径的动画.Vivus提供各种不同的动画参数来让你定制你自己的SVG路径动画.类似的动画效果还有:html5 svg线条动态绘制文字轮廓边框动画 和 html5 svg线条动态绘制iphone边框动画效果. 在线演示:http://www.htmleaf.com/Demo/201501261280.html 下载地址:htt

突袭HTML5之SVG 2D入门1 - SVG综述////////////////zzzzzzzz

突袭HTML5之SVG 2D入门1 - SVG综述 SVG可缩放矢量图形(Scalable Vector Graphics)是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式.SVG是W3C制定的一种新的二维矢量图形格式,也是规范中的网络矢量图形标准.SVG严格遵从XML语法,并用文本格式的描述性语言来描述图像内容,因此是一种和图像分辨率无关的矢量图形格式. 什么是SVG? SVG 指可伸缩矢量图形 (Scalable Vector Graphics) SVG 用来定义用于网络的

网络爬虫技术入门_Python基础与爬虫技术

Python基础与爬虫技术  课程学习地址:http://www.xuetuwuyou.com/course/195 课程出自学途无忧网:http://www.xuetuwuyou.com 课程简介 本作为一种便捷地收集网上信息并从中抽取出可用信息的方式,网络爬虫技术变得越来越有用.使用Python这样的简单编程语言,你可以使用少量编程技能就可以爬取复杂的网站. <Python 基础与爬虫技术>讲解了从静态页面爬取数据的方法以及使用缓存来管理服务器负载的方法.此外,本课程还介绍了如何使用AJA