其中旋转通过CSS来完成

叁个事例上手 SVG 动漫

2017/05/05 · HTML5 ·
SVG

原稿出处:
坑坑洼洼实验室   

CSS3动漫已丰硕强盛,不过依然有生机勃勃部分它做不到的地点。合营SVG,让Web动效有越来越多的只怕。此番要做的功能是三个loading动漫(如图卡塔 尔(英语:State of Qatar):当中旋转通过CSS来达成,然而旋转之后圆弧缩小形成笑颜的嘴巴要求依据SVG来促成。

图片 1

Step1、声明SVG视口

XHTML

<svg width=”100″ height=“100”></svg>

1
<svg width="100" height=“100”></svg>

点名一个宽高都为100像素的区域,width=”100”和width=”100px”是等价的,当然也足以采取任何的合法单位,举个例子cm、mm、em等

开卷器会设置三个默许的坐标体系,见图:左上角为原点,在那之中国水力电力对外公司平(x卡塔尔坐标向右递增,垂直(y卡塔尔国坐标向下依次增加。

图片 2

在未有一些名的情事下,全数的的数值暗许单位都以像素。

Step2、绘制购物袋

购物袋由两个部分组成,先画下面的主体:

XHTML

<path d=”M 20 40 L 80 40 L 80 90 A 10 10 90 0 1 70 100 L 30 100 A 10
10 90 0 1 20 90″ style=”fill: #e9e8ee;” />

1
<path d="M 20 40 L 80 40 L 80 90 A 10 10 90 0 1 70 100 L 30 100 A 10 10 90 0 1 20 90" style="fill: #e9e8ee;" />

任何形状都得以接受路线元素画出,描述轮廓的数量放在它的d属性中。
a.样式中的fill用来设置填充色。
b.路线数据由命令和坐标构成:

指令 说明
M 20 40 表示移动画笔到(20,40)
L 80 40 表示绘制一条线到(80, 40)
A 10 10 90 0 1 70 100 绘制一个椭圆弧

圆弧命令以字母A起初,前边紧跟着7个参数,那7个参数分别用来表示:

  • 椭圆的x半径和y半径
  • 椭圆的x轴旋转角度
  • 圆弧的角度小于180度,为0;大于或等于180度,则为1
  • 以负角度绘制为0,否则为1
  • 终点的x、y坐标

图片 3

接下来绘制购物袋上面的部分

XHTML

<path d=”M 35 40 A 15 15 180 1 1 65 40″ style=”fill: none; stroke:
#e9e8ee; stroke-width: 5;” />

1
<path d="M 35 40 A 15 15 180 1 1 65 40" style="fill: none; stroke: #e9e8ee; stroke-width: 5;” />

下面的有的是贰个半半圆,我同生龙活虎用路径来画出,也足以运用底蕴形状来完毕。

体制中的stokestroke-width分别用来安装描边色和描边的宽窄。

图片 4

Step3、绘制眼睛

XHTML

<circle cx=“40″ cy=”60″ r=”2.5″ style=”fill: #fff;” /> <circle
cx=”60″ cy=”60″ r=”2.5″ style=”fill: #fff;” />

1
2
<circle cx=“40" cy="60" r="2.5" style="fill: #fff;" />
<circle cx="60" cy="60" r="2.5" style="fill: #fff;" />

运用底工形状,画多个个小圆点。八个天性分别是岗位坐标、半径和填充颜色。
图片 5

Step4、绘制嘴巴

XHTML

<circle cx=”50″ cy=”70″ r=”15″ style=”fill: none; stroke: #fff;
stroke-width: 5; stroke-linecap: round;transform: rotate(280deg);
transform-origin: 50% 50%; stroke-dashoffset: -23; stroke-dasharray: 42,
95;”>

1
<circle cx="50" cy="70" r="15" style="fill: none; stroke: #fff; stroke-width: 5; stroke-linecap: round;transform: rotate(280deg); transform-origin: 50% 50%; stroke-dashoffset: -23; stroke-dasharray: 42, 95;”>

嘴巴是豆蔻梢头段圆弧,小编绘制了三个圆,然后描边了里面包车型大巴生龙活虎段,而且做了叁个旋转,来让它的角度处张巍确的地点。

  • stroke-linecap:用来定义开放路线的结束,可选round|butt|square
  • stroke-dasharray:用来创设虚线
  • stroke-dashoffset:设置虚线地方的开端偏移值,在下一手续里,它会和stroke-dasharray一齐用来达成动作效果。

图片 6

Step5、给嘴巴部分增加动作效果

CSS

@keyframes mouth { 0% { transform: rotate(-80deg); stroke-dasharray: 60,
95; stroke-dashoffset: 0; } 40% { transform: rotate(280deg);
stroke-dasharray: 60, 95; stroke-dashoffset: 0; } 70%, 100% { transform:
rotate(280deg); stroke-dashoffset: -23; stroke-dasharray: 42, 95; } }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@keyframes mouth {
  0% {
    transform: rotate(-80deg);
    stroke-dasharray: 60, 95;
    stroke-dashoffset: 0;
  }
  40% {
    transform: rotate(280deg);
    stroke-dasharray: 60, 95;
    stroke-dashoffset: 0;
  }
  70%, 100% {
    transform: rotate(280deg);
    stroke-dashoffset: -23;
    stroke-dasharray: 42, 95;
  }
}

动漫分为多个部分:

  1. 圆弧旋转
  2. 旋转之后降低变形

在二个巡回里,最终留有百分之七十九的时光维系三个停留。

图片 7

Step6、给眼睛加多动漫

多只眼睛都以本着圆弧运动 ,举例左眼,首先用三个路径来规定它的移动轨迹:

XHTML

<path id=”eyeright” d=”M 40 60 A 15 15 180 0 1 60 60″ style=”fill:
none; stroke-width: 0;” />

1
<path id="eyeright"  d="M 40 60 A 15 15 180 0 1 60 60" style="fill: none; stroke-width: 0;" />

接下来利用animateMotion来设置动漫:

XHTML

<circle class=”eye” cx=”” cy=”” r=”2.5″ style=”fill: #fff;”>
<animateMotion dur=”0.8s” repeatCount=”indefinite”
keyPoints=”0;0;1;1″ keyTimes=”0;0.3;0.9;1″ calcMode=”linear”>
<mpath xlink:href=”#eyeleft”/> </animateMotion>
</circle>

1
2
3
4
5
6
7
8
9
10
<circle class="eye" cx="" cy="" r="2.5" style="fill: #fff;">
  <animateMotion
    dur="0.8s"
    repeatCount="indefinite"
    keyPoints="0;0;1;1"
    keyTimes="0;0.3;0.9;1"
    calcMode="linear">
    <mpath xlink:href="#eyeleft"/>
  </animateMotion>
</circle>
  • dur:动漫的年华
  • repeatCount:重复次数
  • keyPoints:运动路线的关键点
  • timePoints:时间的关键点
  • calcMode:调整动漫的位移速率的改换,discrete | linear | paced |
    spline两日特性可选
  • mpath:钦点一个表面定义的路线

图片 8

Step7、将分化地点的动漫片组成到一块儿

  • 眼睛的动漫片是从嘴巴旋转完毕起来,到嘴巴变形落成得了,由此和嘴巴的动漫同样,笔者设置了八个照管的显要时间点。
  • 为了让衔接更流畅,眼睛的卡通片初叶比嘴巴变形开头有个别提前了一丝丝。

图片 9

参考:

  • MDN-SVG文档
  • 《SVG精粹》- 人民邮政和邮电通讯出版社

    1 赞 2 收藏
    评论

图片 10

相关文章