SVG绘图方法(path)

本文介绍了SVG的基本概念及其作为HTML5的新特性如何应用于图形绘制。详细解释了SVG<path>元素的命令集,包括moveto、lineto、curveto等,并通过实例展示了如何使用这些命令绘制复杂的图形。
1、svg是html5的新特性,全称:Scalable Vector Graphiph,可缩放的矢量图,此技术在2000年就已经存在了,独立于网页的一门技术;HTML5之后,纳入了HTML5标准标签库,并进行了一定的瘦身。
2、使用svg要注意的点:
  1. svg图形的样式可以用HTML赋值,也可以使用css形式,但不接收css的一般属性,只能使用svg元素的专有样式属性。比如:背景填充:fill、描边宽度:stroke-width、描边颜色:stroke、文本大小:font-size等...
  2. svg图形的属性不属于HTMLDOM标准,只能使用核心DOM操作其属性
  3. 使用JS动态创建SVG元素时:

        方法一:svg.innerHTML='';方法二:document.createElementNS("http://www.w3.org/2000/svg"," ");

      4.SVG元素的nodeName都是纯小写形式,与普通的HTML元素不同

3、进入正题:svg是使用标签画图,circle画圆,rect画矩形....,但是这些标签,只可以画规则的图形。那么path就是画不规则图形的救星。

我们先在下面列出了SVG <path>元素的虚拟画笔可以使用的命令。大写的指令通常将参数坐标解析为绝对坐标。小写的指令通常将参数坐标解析为相对坐标。

    

指令参数名称描述
Mx,ymoveto
移动到
移动虚拟画笔到指定的(x,y)坐标,仅移动不绘制
mx,ymoveto同M,但使用相对坐标
Lx,ylineto
连直线到
从当前画笔所在位置绘制一条直线到指定的(x,y)坐标
lx,ylineto同L,但使用相对坐标
Hxhorizontal lineto
水平连线到
绘制一条水平直线到参数指定的x坐标点,y坐标为画笔的y坐标
hxhorizontal lineto同H,但使用相对坐标
Vyvertical lineto
垂直连线到
从当前位置绘制一条垂直直线到参数指定的y坐标
vyvertical lineto同V,但使用相对坐标
Cx1,y1 x2,y2 x,ycurveto
三次方贝塞尔曲线
从当前画笔位置绘制一条三次贝兹曲线到参数(x,y)指定的坐标。x1,y1和x2,y2是曲线的开始和结束控制点,用于控制曲线的弧度
cx1,y1 x2,y2 x,ycurveto同C,但使用相对坐标
Sx2,y2 x,yshorthand / 平滑三次方贝塞尔曲线从当前画笔位置绘制一条三次贝塞尔曲线到参数(x,y)指定的坐标。x2,y2是结束控制点。开始控制点和前一条曲线的结束控制点相同
sx2,y2 x,yshorthand / 平滑三次方贝塞尔曲线同S,但使用相对坐标
Qx1,y1 x,y二次方贝塞尔曲线从当前画笔位置绘制一条二次方贝塞尔曲线到参数(x,y)指定的坐标。x1,y1是控制点,用于控制曲线的弧度
qx1,y1 x,y二次方贝塞尔曲线同Q,但使用相对坐标
Tx,y平滑的二次贝塞尔曲线从当前画笔位置绘制一条二次贝塞尔曲线到参数(x,y)指定的坐标。控制点被假定为最后一次使用的控制点
tx,y平滑的二次贝塞尔曲线同T,但使用相对坐标
Arx,ry x-axis-rotation large-arc-flag,sweepflag x,y椭圆弧线从当前画笔位置开始绘制一条椭圆弧线到(x,y)指定的坐标。rx和ry分别为椭圆弧线水平和垂直方向上的半径。x-axis-rotation指定弧线绕x轴旋转的度数。它只在rx和ry的值不相同是有效果。large-arc-flag是大弧标志位,取值0或1,用于决定绘制大弧还是小弧。sweep-flag用于决定弧线绘制的方向
arx,ry x-axis-rotation large-arc-flag,sweepflag x,y椭圆弧线同A,但使用相对坐标
Z闭合路径从结束点绘制一条直线到开始点,闭合路径
z闭合路径同Z

注意:所有的这些字符命令都可以用大小写两种形式。大写表示绝对位置,而小写表示相对位置。

(绝对位置:相对于画布的原点。一直在画布的左上方。相对坐标:是表示相对于它前面的点需要移动多少距离)

举一个例子:画出一个颜色相间的镭射图

 <svg id="s" width="100" height="100">
	<path d=" M50 50 L 25 6.6987 A 50 50, 0,0,1,75 6.6987 L 50 50" fill="#F6E237"/>
	<path d=" M50 50 L 0 50 A 50 50, 0,0,1,25 6.6987 L 50 50" fill="#000"/>
	<path d=" M50 50 L 75 6.6987 A 50 50, 0,0,1,100 50 L 50 50" fill="#000"/>
	<path d=" M50 50 L 100 50 A 50 50, 0,0,1,75 93.30127 L 50 50" fill="#F6E237"/>
	<path d=" M50 50 L 75 93.30127 A 50 50, 0,0,1,25 93.30127 L 50 50" fill="#000"/>
	<path d=" M50 50 L 25 93.30127 A 50 50, 0,0,1,0 50 L 50 50" fill="#F6E237"/>
</svg>

结果如下图所示:



解释一行代码:

<path d=" M50 50 L 25 6.6987 A 50 50, 0,0,1,75 6.6987 L 50 50" fill="#F6E237"/>
d:是定义一条路径的属性。首先moveTo到画布的中点(50,50)从这一点出发,画一条直线到点(25,6.6987),又从这一点出发画一条圆弧这里是一个正圆,因为rx=ry,一直到(75,6.6987)这个点,在从这点出发画一条直线到中心,并填充这部分区域为颜色#F6E237;

参考文章:https://blog.youkuaiyun.com/u012917700/article/details/51838552

               
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值