04-SVG

作者: 七分之二十四 | 来源:发表于2019-10-07 16:08 被阅读0次

SVG开篇

  • SVG是可缩放的矢量图,在计算机中有两种图形,一种是位图,一种是矢量图

  • 位图

    • 传统的jpg / png / gif图都是位图

    • 位图是由一个个很小的颜色小方块组合在一起的图片,一个小方块代表1px

    • 优点:色彩丰富逼真

    • 缺点:放大后会失真,体积大

  • 矢量图

    • 矢量图是用XML格式定义,通过[路径] 和 [填充颜色]来描述渲染的图片

    • 优点:放大后不会失真,体积很小

    • 缺点:不易制作颜色变化太多的图像

  • 注意点

    • 和canvas一样,svg也有默认的宽高,并且默认的宽高和canvas都是一样的,默认的宽度是300px,默认的高度是150px

    • 和canvas不同的是,svg可以通过css设置宽高也可以通过行内属性设置宽高

SVG四种使用方法

  • 内嵌到HTML中(直接在HTML中绘制)

  • 通过浏览器直接打开SVG文件

    • 如果需要将svg保存到单独的一个文件中,并且需要通过浏览器直接打开,那么久必须给svg添加一个属性 xmlns = "http://www.w3.org/2000/svg";
  • 在HTML的img标签中引用

  • 作为CSS背景使用

SVG绘制矩形

  • 绘制矩形:rect

    • x/y: 指定绘制的位置

    • width/height: 指定绘制的大小

    • fill: 修改填充的颜色

    • stroke: 修改描边的颜色

    • stroke-width: 修改描边的宽度

    • rx/ry: 设置圆角的半径

SVG绘制圆和椭圆

  • 绘制圆:circle

    • cx/xy: 圆绘制的位置

    • r: 圆的半径

  • 绘制椭圆:ellipse

    • cx/cy: 椭圆绘制的位置(圆心的位置)

    • rx: 水平方向的半径

    • ry: 垂直方向的半径

SVG绘制直线和折线

  • 绘制直线:line

    • x1/y1: 设置起点

    • x2/y2: 设置终点

  • 绘制折线:polyline

    • points: 设置所有的点,两两一对
  • 绘制多边形:polygon

    • polygon和polyline差不多,只不过会自动关闭路径

SVG常用属性

  • fill: 修改填充颜色

  • fill-opacity: 0~1设置填充颜色的透明度

  • stroke: 修改描边颜色

  • stroke-width: 修改描边宽度

  • stroke-opacity: 0~1 设置描边透明度

  • stroke-linecap: butt/square/round 设置线段两端帽子

  • stroke-dasharray: 设置虚线

  • stroke-dashoffset: 设置虚线偏移位

  • stroke-linejoin: miter/bevel/round 设置折线转角样式

  • 注意点:在SVG中这些所有的常用属性都是可以在CSS中使用的

SVG绘制路径

  • SVG路径(path)是一个比较牛X的东西,可以绘制任意图形,只不过比较复杂而已

    • M = moveto 起点

    • L = lineto 其他点

    • H = horizontal lineto 和上一个点Y相等

    • V = vertical lineto 和上一个点X相等

    • Z = closepath 关闭当前路径

  • 路径指令注意点

    • 大写字母是绝对定位,小写字母是相对定位

    • 绝对定位: 写什么位置就是什么位置

    • 相对定位: 相对上一次的位置,在上一次位置基础上调整

SVG绘制圆弧
  • A(rx,ry,xr,laf,sf,x,y) 从当前位置绘制弧线到指定位置

    • rx(radius-x):弧线X半径

    • ry(radius-y):弧线Y半径

    • xr(xAxis-rotation):弧线所在椭圆旋转角度

    • laf(large-arc-flag):是否选择弧较长的那一段

    • sf(sweep-flag):是否顺时针绘制

    • x,y:弧的终点位置

SVG绘制贝塞尔曲线
  • Q(x1,y1,x,y) 从当前位置绘制二次贝赛尔曲线到指定位置

    • x1/y1: 控制点位置

    • x/y: 终点位置

  • C(x1,y1,x2,y2,x,y) 从当前位置绘制三次贝赛尔曲线到指定位置

    • x1/y1: 控制点1位置

    • x2/y2: 控制点2位置

    • x/y: 终点位置

SVG绘制文本

  • 和canvas一样,是以左下角作为参考

  • 和canvas一样,默认是文字的基线和指定的位置对齐

  • 绘制文本:text

    • x/y: 指定绘制位置

    • style: 设置文字样式

    • text-anchor: 指定文字水平方向对齐方式

    • dominant-baseline: 指定文字垂直方向对齐方式

    • dx/dy: 相对前一个文字位置,未设置位置的文字会继承前一个文字

    • 绘制多行文本: <text><tspan>文本内容</tspan></text>

  • 绘制路径文本:textPath

    • 定义一个路径

    • 告诉文本需要按照哪个路径来绘制(xlink:href)

    • 注意点:如果是绘制路径文本,那么超出路径范围的内容不会被绘制出来

SVG绘制超链接

  • 可以给任意内容添加超链接,只需要用超链接包裹起来即可

    • xlink:href: 指定链接地址

    • xlink:title: 指定链接提示

    • target: 指定打开方式

SVG绘制图片

  • 通过image标签

  • 默认情况下我们指定的图片多大就绘制多大

  • 当设置的尺寸和图片实际尺寸不一样时,高度填满,宽度等比拉伸

SVG结构标签

  • g结构元素

    • g是group的缩写,可以将多个元素放到一个g标记中,这样就组成了一个组

    • 以便操作统一,比如旋转,缩放或者添加相关样式等等

    • g标记设置的所有样式都会应用到这一组所有的样式中

  • use

    • g结构元素封装的图形还可以通过<use>元素进行复制使用

    • <use xlink:href="">

  • defs

    • g封装的元素默认是可见的,如果仅仅是需要定义一组模板,将来需要用到时候才显示,那么就可以使用defs
  • symbol

    • symbol兼具<g>的分组功能和<defs>初识不可见的特性

    • symbol能够创建自己的视窗,所以能够应用viewBox和preserveAspecRatio属性

SVG裁剪和蒙版

  • clipPath

    • 只有路径范围内的内容会被显示,路径范围以外的内容不会被显示
  • mask

    • mak和clipPath差不多

    • 裁切路径是可见与不可见的突变

    • 蒙版则是可见与不可见的渐变

  • 注意点: 在指定裁剪和蒙版的时候需要提供过url(#id)来指定

SVG渐变色

  • 和Canvas一样,在SVG中也可以生成渐变颜色

    • <linearGradient></linearGradient> 线性渐变

    • <radialGradient></radialGradient> 径向渐变

  • 渐变属性

    • x1/y1: 渐变范围开始位置

    • x2/y2: 渐变范围结束位置

    • 默认情况下x1/y1/x2/y2是当前元素的百分比,可以通过gradientUnits修改

    • gradientUnits = "objectBoundingBox"

    • gradientUnits = "userSpaceOnUse"

  • 注意点: 使用渐变颜色需要通过url(#id)来使用

SVG画笔

  • 在SVG中除了可以使用纯色和渐变色作为填充色以外,还可以使用自定义图形作为填充

  • Pattern属性

    • width/height默认情况下也是百分比

    • 可以通过gradientUnits修改

    • patternUnits="objectBoundingBox"

    • patternUnits="userSpaceOnUse"

viewBox

  • ViewBox就是可视区域,用户能看到的区域

  • 默认情况下,可视区域的大小和内容区域大小是一致的,但是我们也可以手动修改可视区域的大小

  • ViewBox属性格式

    • viewBox="x y width height"

    • x: 修改可视区域x方向位置

    • y: 修改可视区域y方向位置

    • width/height: 修改可视区域尺寸,近大远小

  • 默认情况下如果viewBox的尺寸是等比缩放的,那么调整后viewBox区域的xy和内容区域的xy对齐

  • 如果viewBox的尺寸不是等比缩放的,那么系统就会调整viewBox的位置,我们设置的x/y会失效

  • 如果需要viewBox的xy和内容区域的xy继续保持位置,那么就需要使用preserveAspectRatio属性来设置对齐方式

    • xMin viewport和viewBox左边对齐

    • xMid viewport和viewBox x轴中心对齐

    • xMinx viewport和viewBox右边对齐

    • YMin viewport和viewBox上边缘对齐,注意Y是大写

    • YMid viewport和viewBox y轴中心点对齐,注意Y是大写

    • YMax viewport和viewBox下边缘对齐,注意Y是大写

SVG动画

  • 在SVG中提供了三种常用动画标记

    • <animate> 基础动画

    • <animateTransform> 形变动画

    • <animateMotion> 路径动画

  • SVG动画使用方式

    • 创建动画,告诉动画标记哪个元素需要执行动画

    • 创建元素,在元素中说明需要执行什么动画

  • SVG动画属性

    • attributeType: CSS/XML 规定属性值的名称空间

    • attributeName: 规定元素的哪个属性会产生动画效果

    • from/to: 从哪到哪

    • dur: 动画时长

    • fill: 动画结束之后的状态 保持freeze结束状态/remove恢复初始状态

  • SVG动画常用属性

    • repeatCount: 规定动画重复的次数

    • repeatDur: 规定动画重复总时长

    • begin: 规定动画开始的时间

      • begin="1s"

      • begin="click"

      • begin="click + 1s"

    • restart: 规定元素开始动画之后,是否可以被重新开始执行

      • always: 动画可以再任何时候被重置,这是默认值

      • whenNotActive: 只有在动画没有被激活的时候才能被重置,例如在动画结束之后

      • never: 在整个SVG执行的过程中,元素动画不能被重置

    • calcMode: 运动速度

    • keyTimes: 划分动画时间片段,取值0~1

    • value:划分对应取值片段的值

  • 形变动画中固定的属性
    • attributeName: transform
    • type: translate/rotate/scale

SVG脚本编程

相关文章

  • 04-SVG

    SVG开篇 SVG是可缩放的矢量图,在计算机中有两种图形,一种是位图,一种是矢量图 位图传统的jpg / png ...

网友评论

      本文标题:04-SVG

      本文链接:https://www.haomeiwen.com/subject/lhwbjctx.html