svg小结

1 元素小结

2 大小单位小结

svg根元素可以指定width height并且可以不带单位;也可以带单位px,并配合使用viewBox指定缩放。

指定一个宽高比200:100,并指定映射到2000x1000px的视图中,注意这里刚好是同比例的,也可以是不同比例,比如1000x1000px也是可以的,这样会被拉扁。带单位的则确切的指定大小

<!-- viewBox指定左上角和宽高 -->
<svg width='2000px' height='1000px' 
viewBox='0 0 200 100'></svg>

3 属性

上述属性绝大多数可以直接作为svg中元素的属性,也可以作为style。

4 动画

css绘制动画,通过animation@keyframes。animation用法:animation: name duration timing-function delay iteration-count direction;,参数不必全部都有,一般有动画名name和持续时间duration俩就够了。

@keyframe中可以用百分比来设置开始和结束的样子,里面写的都是style中的属性,svg的话就可以写3中提到的属性,例如写个大小变化的如下:

.e{
    animation: move 1s ease 1s 2 alternate
}
@keyframes move{
    0%{ transform(scale(1))     }
    100%{ transform(scale(1.5)) }
}

<hr/>

除了css设置动画,还可以使用js和相关框架,例如gsap。通过下面的cdn可以引入gsap。

<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.2.6/gsap.min.js"></script>

一般常用时间线来绘图,下面的例子就是时间线的使用方式,使用连续的to函数调用,将两个动画串联起来。效果是.css这个元素,0-1s 向左移动10,1-2s向右移动10.注意这里的x是相对移动,而原生svg一般是绝对位置,两者一定区分开!!!

const t1 = gsap.timeline();

// selector,属性,[delay]
t1.to('.css1',{duration:1,x:-10})
    .to('.css1',{duration:1,x:0})

注意:to的第三个参数如果不设置就是顺序执行,即默认第三个参数其实就是duration的值。

delay除了设置为固定的时间数值,还有一些高级写法:

属性对象的key非常多,比较重要的有

旋转和缩放中心,在gsap中和原生svg也不一样,后者是transform-origin和transform-box来设置的。而gsap默认中心时图形的(0,50%)点,可以通过下面的方式进行重设,注意啦,重设时候的center默认就是当前元素的center而不是整个svg的center。

gsap.set('.line line',{transformOrigin:"center"})

gsap.set('.line .line-three',{transformOrigin:"right buttom"})