最近在做首页动画的时候,引入有背景色的mp4动图时,动图的背景色不能很好的融入相同背景色的不同浏览器和不同显示器,出现了下图这种尴尬的情况:
动图的边界始终有根分界线,即使调整了背景色适应这个边界,也总是会在不同的显示器中显示出不同程度的分界线。
于是我决定用代码实现整个动图。制作这样一套动图,只靠前端攻城狮是有点费劲的,毕竟需要很多线图的绘制,没有专业的UI支持很难设计出标准漂亮的动图。
拿我这次做的动图来说整体由css操作png和svg搭建流转路线构成
首先需要UI同学把整体布局,距离、素材规划出来然后就是根据整体布局和距离把素材扑上去最最重要的是svg绘制的流动线路1.svg path
这种线路图,UI同学一般绘制完都是向下面这样的:
总之就是很长很乱的一段。。。
这是因为AI绘制svg的时候每一条线都是由两条线和一些弯曲的规则(贝塞尔曲线)组成。建议直接用UI同学给的svg编辑器打开后直接引用,因为”贝塞尔曲线“真的不是随便就能Hold住的。。。下面附上svg path指令对比上面的代码可以看出路径d由M作为路径起始坐标点开始由z结束这段闭合曲线。
直线由L或者l绘制,分别代表绝对路径和相对路径曲线由贝塞尔曲线规则绘制C(C x1, y1, x2, y2, x,y )为了更方便展现出贝塞尔的奥义,举下图说明:所以踩了这些坑的我还是直接用了UI绘制好的svg
绘制
- 直接上path
首先这样肯定是可以绘制出线的,但是我们的目的不光是要画出线,还要在线上加动画效果
动画
我是用一小段渐变色的流动来表示数据的流动,所以首先需要给线段--渐变色
在SVG中,有两种主要的渐变类型:
- 线性渐变(LinearGradient)
- 放射性渐变|径向渐变(RadialGradient)
区别在于:
使用径向渐变可以定义渐变中心原点的坐标,半径,更方便加在线上。
直接上代码:渐变的颜色范围可由两种或多种颜色组成。每种颜色通过一个<stop>标签来规定。offset属性用来定义渐变的开始和结束位置。大致效果如下:
<animation>
attributeName要变化的元素属性名称分别为x轴和y轴方向,values是每一个经过的关键值坐标点,可以直接用Adobe AI打开svg在线上直接拿到关键点的坐标分别写入cx,cy的value中,调整dur时间,加上indefinite循环: