原文:SVG路径动画解密


SVG路径动画效果现在貌似越来越多网站都使用了,给我的感觉就像是一段时间的流行而已,刚一出来大家都感觉很炫酷,时间久了也就审美疲劳啦!如果还不知道什么是SVG路径动画的童鞋,快来看一个demo吧:http://tympanus.net/Development/SVGDrawingAnimation/

课程库相关课程: 常用的三种生成SVG图形动画方式

怎么样?是不是很炫酷!另外这种技术还可以实现将logo外径作为loading的进度环,比如现在的天猫app里的加载进度条。想知道这是怎么实现的吗,我也是前些天略微研究了一下,在此分享出来吧!

要做出一个这样的特效首先有几个关键点:

  1. 核心技术:SVG路径图+SVG样式(stroke-dasharray和stroke-dashoffset),stroke-dasharray用于创建虚线,也就是把svg图用虚线来画,这个属性可以是一个数组,数组里面的值就是虚线的值,依次循环。详情:http://www.w3cschool.cc/svg/svg-stroke.html,而stroke-dashoffset顾名思义就是虚线在原路径上的相对偏移量了。
  2. 开发前准备:将png图在ai中打开,利用钢笔工具描边,画出描边的路径并另存为SVG矢量图,这就是要html中要用的路径了(大神如果可以在html中直接用path画出想要的路径可以直接画!)
  3. 实现原理:利用css3的animation动画特效来控制stroke-dasharray和stroke-dashoffset值的改变,以达到路径动画的效果

是不是恍然大悟了,看上去很简单的样子吧!这里来个本站的代码分享: demo传送门

 现在详细说明一下demo,这个demo中最下面那个不规则形状

就是我用illustrator钢笔随手画的一个闭合路径,然后另存为.svg文件,打开后将<svg>代码部分考到html中,并稍微改动一下成为


  1. <svg width="400px" height="400px">
  2. <path id="test" fill="none" stroke="#fff" stroke-width="3" d="M197,218c0,0-112,31-23,77s95,82,110,16s246.28,104,13.64-69S108,130.477,197,218z"/>
  3. <path fill="none" stroke="#fff" stroke-width="3" d="M197,218c0,0-112,31-23,77s95,82,110,16s246.28,104,13.64-69S108,130.477,197,218z" opacity="0.05"/>
  4. </svg>

 这个样子,svg内的两个path是完全相同的,第一个是用来描边的,第二个是一个背景路径而已,可以根据需求选择性删掉。

CSS部分是重点:


  1. #test {
  2. stroke-dasharray: 0,852.45;/*表示虚线描边。数组是虚线数组。详解:http://www.w3cschool.cc/svg/svg-stroke.html。[0,图路径长]*/
  3. stroke-dashoffset: 0;/*表示虚线的起始偏移*/
  4. -webkit-animation: polanim 3s linear infinite ;
  5. -webkit-animation-fill-mode:both ;
  6. }
  7.  
  8. @-webkit-keyframes polanim {
  9. 0% {
  10. stroke-dasharray: 0, 852.45;
  11. stroke-dashoffset:0;
  12. }
  13. 50% {
  14. stroke-dasharray: 852.45, 0;
  15. stroke-dashoffset:0;
  16. }
  17. 100% {
  18. stroke-dasharray: 0, 852.45;
  19. stroke-dashoffset:-852.45;
  20. }
  21. }

 给需要描边的那个path定义一个id(class也行),然后在css中定义了stroke-dasharray、 stroke-dashoffset这两个关键点,唯一疑惑的就是那个stroke-dasharray:
0,852.45;的那个852.45了吧,这个值就是整个路径的长度。前50%的动画通过animation来动态改变stroke-dasharray的值,就好像一个路径上的虚线的实部分从短到长,而虚部分从长到短从而达到了路径动画的效果,后50%的动画是想让路径画完后,再按照路径消失一圈,这里用到了stroke-dasharray和stroke-dashoffset的同时改变,也就是虚线的实部分从长到短的同时再改变虚线的偏移量,把实部分往回拉。如果实在想不通的话就反复试着改这几个参数值来看看各是什么效果好啦。

哦 对了,整个路径的长度852.45可以用js提前计算出来,代码是:


  1. var path = document.getElementById('test');
  2. var length = path.getTotalLength();
  3. console.log(length)

 在css动画设置中设置不同的百分比时间和不规则的stroke-dasharray\stroke-dashoffset就可以像demo中那个logo似的达到不那么死板的效果

原文链接:http://www.gbtags.com/gb/share/5581.htm

SVG路径动画解密的更多相关文章

  1. DrawSVG - SVG 路径动画 jQuery 插件

    jQuery DrawSVG 使用了 jQuery 内置的动画引擎实现 SVG 路径动画,用到了 stroke-dasharray 和 stroke-dashoffset 属性.DrawSVG 是完全 ...

  2. svg路径动画心得

    svg动画,随着路线运动,项目中需要用到,接触的时候感觉很高级,但是不会-无从下手呀!于是在网上找相关资料,先借鉴再修改成自己的. <svg width="500" heig ...

  3. d3操作svg路径动画,及dom移动

    图片跟随路径循环运动,dom也跟着路径运动(利用实时获取坐标位置的方法,改变transform) 1,准备路径 a,自己脑补路径 b,在ps上画好,然后在保存成png-24图片,背景透明,在网站htt ...

  4. svg路径蒙版动画

    svg路径蒙版动画,是比较实用的一种动画效果,能够绘制如下图所示的动画. 接下来细说这样的动画是如何做成的: 1.准备工作 2.SVG路径动画 3.SVG路径蒙版动画 4.复杂图形的编辑技巧 1.准备 ...

  5. 如何使用SVG及其动画技术为你的 Web 前端开发带来一些新鲜的体验

    任何有开发经验的前端工程师都会考虑到不成体系的设备生态所带来的挑战.设备间不同的屏幕尺寸.分辨率和比例使得产品难以提供一致的体验,对于那些对产品有着像素级完美追求的人这种体验差异尤其显著! SVG(可 ...

  6. 纯CSS实现帅气的SVG路径描边动画效果(转载)

    本文转载自: 纯CSS实现帅气的SVG路径描边动画效果

  7. SVG的路径动画效果

    使用SVG animateMotion实现的一个动画路径效果,相关代码如下. 在线调试唯一地址:http://www.gbtags.com/gb/debug/c88f4099-5056-4ad7-af ...

  8. css3 svg路径蒙版动画

    css3 svg路径蒙版动画 具体看https://www.cnblogs.com/oubenruing/p/9568954.html 还有个更好控制的写法<pre><!DOCTYP ...

  9. css3 svg 物体跟随路径动画教程

    css3 svg 物体跟随路径动画教程https://www.jianshu.com/p/992488f3f3fc

随机推荐

  1. jquery平滑滚动页面

    滚动到顶部 $('.scroll_top').click(function(){$('html,body').animate({scrollTop: '0px'}, 800);}); 滚动到指定位置 ...

  2. 【u003】计算概率

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 小明有n个长度不一的小木棍,这些木棍的长度都是正整数.小明的父亲想和小明做一个游戏.他规定一个整数长度 ...

  3. Extended paging tables to map guest physical memory addresses from virtual memory page tables to host physical memory addresses in a virtual machine system

    A processor including a virtualization system of the processor with a memory virtualization support ...

  4. 使用Boolean类型同步锁引起异常的分析

    原文地址 http://topic.csdn.net/u/20080710/19/f61cb4db-ddff-4457-a26a-4ea578b0cc6c.html?87447500 http://w ...

  5. 窗体背景的绘制(Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景)

    核心思想:由于Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景.通过TImage组件也可以实现,但是重写W ...

  6. iOS中,MRC和ARC混编

    假设一个project为MRC,当中要加入ARC的文件: 选择target -> build phases -> compile sources -> 单击ARC的文件将compil ...

  7. java-synchronized原理

    介绍 synchronized是一种独占式的重量级锁,在运行到同步方法或者同步代码块的时候,让程序的运行级别由用户态切换到内核态,把所有的线程挂起,通过操作系统的指令,去调度线程.这样会频繁出现程序运 ...

  8. 【a803】营救

    Time Limit: 10 second Memory Limit: 2 MB 问题描述 铁达尼号遇险了!它发出了求救信号.距离最近的哥伦比亚号收到了讯息,时间就是生命,必须尽快赶到那里.通过侦测, ...

  9. JVM调优之Tomcat启动参数配置及详解

    开发项目中会遇到Tomcat内存溢出(java.lang.OutOfMemoryError: PermGen space)的问题,通过查找资料找到是通过设置Tomcat 启动堆空间大小.年轻代大小.每 ...

  10. docker-windows随笔资料整理

    背景 业务需求:优化机器学习,IOT边缘计算性能,替换现有的虚拟机部署方案. 技术背景: .netcore python Docker 学习资料 Docker中文社区: http://www.dock ...