基础的基础
svg
学svg前先了解位图和矢量图大的区别
- 位图: 放大会失真图像边缘模糊,因为它是由橡树点组成的
- 矢量图:放大不会失真,使用xml描述图形
svg便是矢量图,所以金额已使用css设置样式,也可以用js对其草操作
基本使用
text<svg></svg>
默认w300h150
基本图形
属性不赘述一眼能看出来
-
矩形
text<rect x="20" y="50" width="100" height="100" rx="20" ry="10"></rect> -
圆形
text<circle cx="50" cy="0" r="20"></circle> -
直线
text<line x1="20" y1="30" x2="50" y2="100" stroke="#008c8c" /> -
折线
text<polyline points="1 1 20 20 100 50 60 80" stroke="#F0F" /> -
多边形
text<polygon points="1 1 20 20 100 50 60 80" stroke="#F0F" fill="#F0F" /> -
路径
text<path d="M 10 10 L 100 50 L 10 80 Z" stroke="blue" fill="none" />关于d属性
- M: 起始点坐标,moveto 的意思。每个路径都必须以 M 开始。M 传入 x 和 y 坐标,用逗号或者空格隔开。
- L: 轮廓坐标,lineto 的意思。L 是跟在 M 后面的。它也是可以传入一个或多个坐标。大写的 L 是一个绝对位置。
- l: 这是小写 L,和 L 的作用差不多,但 l 是一个相对位置。
- H: 和上一个点的Y坐标相等,是 horizontal lineto 的意思。它是一个绝对位置。
- h: 和 H 差不多,但 h 使用的是相对定位。
- V: 和上一个点的X坐标相等,是vertical lineto 的意思。它是一个绝对位置。
- v: 这是一个小写的 v ,和大写 V 的差不多,但小写 v 是一个相对定位。
- Z: 关闭当前路径,closepath 的意思。它会绘制一条直线回到当前子路径的起点。
关于样式
- 填充颜色
- 使用属性fill
- 透明度 fill-opacity
- 描边
- 使用属性stroke
- 透明度 stroke-opacity
- 宽度 stroke-width
- 虚线描边stroke-dasharray
- 虚线偏移量 stroke-dashoffset
canvas
canvas翻译过来就是画布,可以用javascript在上面绘画,是H5的新API
应用场景
- 游戏
- 可视化数据图表
用法
<canvas></canvas>,默认w300h150
通过获取绘图上下文精选绘制
绘制路径
canvas坐标原点的定位在左上角
-
moveTo 设置路径的起点
-
lineTo 绘制一条直线到起点
-
beginPath/closePath
作用是将 不同绘制的形状进行隔离, 每次执行此方法,表示重新绘制一个路径,跟之前的绘制的墨迹可以进行分开样式设置和管理。
-
stroke 描边
绘制一个基本图形的过程
text// 1. 开始 ctx?.beginPath(); // 2. 选择起始点 ctx?.moveTo(20, 20); // 3. 画线 ctx?.lineTo(50, 80); ctx?.lineTo(100, 180); ctx?.lineTo(0, 20); // 填充 ctx?.fill(); // 4。 闭合路径 ctx?.closePath(); // 5. 描边 ctx?.stroke();
基础图形
text// 篡改就矩形 ctx?.beginPath(); ctx?.rect(10, 20, 40, 80); ctx?.fill(); ctx?.closePath(); ctx?.stroke(); // 画饼状图 ctx?.beginPath(); ctx?.moveTo(100, 100); ctx?.arc(100, 100, 150, 0, Math.sin(40), false); ctx?.fill(); ctx?.stroke(); ctx?.closePath(); // 写字 ctx?.beginPath(); ctx!.font = "18px '微软雅黑'"; ctx!.textAlign = "center"; ctx?.fillText("test", 300, 300, 100); ctx?.stroke(); ctx?.closePath(); // 画图像 ctx?.beginPath(); // 相当于复刻相对比例图片 ctx?.drawImage(canvasRef.value as CanvasImageSource, 300, 0); ctx?.stroke(); ctx?.closePath();
关于样式
- fillStyle : 设置或返回用于填充绘画的颜色
- strokeStyle: 设置或返回用于笔触的颜色
- 设置阴影,渐变样式
svg和canvas的区别
svg
- 矢量图放大不失真
- 支持事件处理器
- 文字独立、可编辑可搜索
canvans
- 绘制出来的图形是位图具有很好的渲染性能
- 适合数据量比较大(>1000)
- 大量图形高频率交互
- 适合游戏
- 可以导出jpg/png图片
https://raw.githubusercontent.com/A1ex-01/drawing-board/main/blog/blog-bg.png