
animate
下面的例子将圆的cx属性作为动画。为了实现这种效果,我们添加了一个
- attributeName
需要动画的属性名称 - from
属性的初始值 - to
终止值 - dur
动画的时间
如果你想要让该元素的更多属性具有动画效果,只要添加更多的
1 | <svg xmlns="http://www.w3.org/2000/svg" width="300px" height="100px"> |
animateTransform
1 | <svg xmlns="http://www.w3.org/2000/svg" width="300px" height="200px"> |
animateMotion
Example 1: Linear motion
在这个例子中,一个蓝色的圆在黑盒的左右边缘之间来回的反弹,无限地重复着同样的动作。该动画是由
1 | <svg xmlns="http://www.w3.org/2000/svg" width="300px" height="100px"> |
Example 2: Curved motion
和上面差不多的例子,只不过现在是沿着曲线和路径方向运动。
1 | <svg width="300px" height="100px"> |
1 | <symbol> |
请注意三者之间的区别
animate 主要用于控制属性的变换,例如cx,cy ,r
animateTransform 主要用于控制位移/倾斜/放大,此时attrbuteName=”transform” transform必须是这个名字,其它名字不起作用
animateMotion 主要用于控制路径运动
额外参数说明
repeatCount=”indefinite” 动画重复,可以是数字N,当是N时,将执行N次
注意事项
svg动画animate/animateTransform/animateMotion可以同时存在多个,例下
1 | <symbol> |
线性动画
第一:概念解释
1. stroke意思是:画短线于,在…上划线
2. stroke-dasharray:用于创建虚线,之所以后面跟的是array的,是因为值其实是数组。请看下面解释
1 | stroke-dasharray = '10' |
stroke-dasharray为一个参数时: 其实是表示虚线长度和每段虚线之间的间距
如:stroke-dasharray = ‘10’ 表示:虚线长10,间距10,然后重复 虚线长10,间距10
两个参数或者多个参数时:一个表示长度,一个表示间距
如:stroke-dasharray = ‘10, 5’ 表示:虚线长10,间距5,然后重复 虚线长10,间距5
如:stroke-dasharray = ‘20, 10, 5’ 表示:虚线长20,间距10,虚线长5,接着是间距20,虚线10,间距5,之后开始如此循环
3. stroke-dashoffset: offset:偏移的意思。
这个属性是相对于起始点的偏移,正数偏移x值的时候,相当于往左移动了x个长度单位,负数偏移x的时候,相当于往右移动了x个长度单位。
需要注意的是,不管偏移的方向是哪边,要记得dasharray 是循环的,也就是 虚线-间隔-虚线-间隔。
这个属性要搭配stroke-dashoffset才能看得出来效果,非虚线的话,是无法看出偏移的。
概念有点抽象,来看一个MDN的例子,图中红线段是偏移的距离
上图效果分别是:
1.没有虚线
2.stroke-dasharray=”3 1” ,虚线没有设置偏移,也就是stroke-dashoffset值为0
3.stroke-dashoffset=”3”,偏移正数,虚线整体左移了3个单位,图中3后面的红线段,就是起始线段,线段之后是1个单位的间隔,我们可见区域从这个间隔开始,然后循环 3-1,3-1的虚线-间隔-虚线-间隔
4.stroke-dashoffset=”-3”,偏移负数,虚线整体右移动了3个单位,由于dasharray 是循环的,前面偏移的位置会有dasharray 填充上
5.stroke-dashoffset=”1”,偏移正数,虚线整体左移了1个单位,最终呈现出来的效果跟 线段4 一样
圆形环绕一圈效果
鼠标hover的时候,外层线段绕自身一圈。这个动画的实现原理,跟上面的是一毛一样的
设置stroke-dasharray虚线长度等于当前圆的周长,间隔大于或者等于圆的周长
第一步:先画出一个圆圈:代码如下,圆的半径设置为50
1 | <svg width="200" height="200" viewBox="0 0 200 200"> |
第二步:设置圆的stroke-dasharray和stroke-dashoffset,为圆的周长
1 | #circle{ |
第三步:hover的时候,设置stroke-dashoffset为0,注意圆的stroke起始位置为右侧中间
1 | svg:hover #circle{ |
圆形环绕的效果就做好了~
SVG复用
与的相同点
元素用于预定义一个元素使其能够在SVG图像中重复使用。 元素用于定义可重复使用的符号。 - 嵌入在
或 元素中的图形是不会被直接显示的,除非你使用
与的不同点
- xlink定义了一套标准的在 XML 文档中创建超级链接的方法,可以用它来引用
元素或 内定义的元素和组。 - 一个
元素可以有preserveAspectRatio和viewBox属性。而 元素不能拥有这些属性。
因此相比于在
1 | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" height="400"> |
参考实例
1 |
|
异常问题
- svg作为背景图片时使用background-size:100% 100%;不起作用?
打开svg图片,然后在svg标签上面加上属性:preserveAspectRatio=”none meet”;
- 本文标题:svg那些事
- 本文作者:邵预鸿
- 创建时间:2021-02-21 12:29:34
- 本文链接:/images/logo.jpg2021/02/21/svg那些事/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!