一:矩形相关:

1、获取canvas执行上下文()

首先先给canvas画布定义一个大小;然后利用2d接口的方法进行绘制

cosnt ctx = canvas.getContext(‘2d’) 获取2d接口实现绘制
ctx.fillStyle = green; 需要在画布上填充的颜色类型
ctx.fillRect(x, y, width, height) x: 相对于canvas画布的x轴坐标;
width: 画出矩形的大小
ctx.clearRect(x, y, width, height) 清除哪个位置的矩形;实现透明效果

  1. <canvas id="canvas"></canvas>
  2. <script>
  3. const canvas = document.getElementById('canvas');
  4. const ctx = canvas.getContext('2d');
  5. ctx.fillStyle = 'green';
  6. ctx.fillRect(10, 10, 150, 100); // 参数 x y width height
  7. ctx.clearRect(15, 15, 50, 50) ;
  8. ctx.stroke(50, 50, 100, 100) // 绘制出一个轮廓矩形
  9. </script>

image.png
ctx.strokeRect(50, 50, 100, 100) 画出下图的矩形

  1. <canvas id="canvas"></canvas>
  2. <script>
  3. const canvas = document.getElementById('canvas');
  4. const ctx = canvas.getContext('2d');
  5. // 参数 x y width height
  6. // 和fillStyle的区别
  7. ctx.strokeStyle = 'orange' // 轮廓的颜色
  8. ctx.stroke(50, 50, 100, 100) // 绘制出一个轮廓矩形
  9. </script>

image.pngimage.png

二:画直线(line)

  1. <canvas id="canvas"></canvas>
  2. <script>
  3. const canvas = document.getElementById('canvas');
  4. const ctx = canvas.getContext('2d');
  5. // 参数 x y width height
  6. ctx.beginPath(); // 路径
  7. ctx.strokeStyle = 'orange'; // 画笔的颜色
  8. // 两点确定一条直线
  9. ctx.moveTo(50, 50) // 从哪个位置开始画(起始点)
  10. ctx.lineTo(100, 100) // 画到哪一个位置
  11. // 控制线的宽度
  12. ctx.lineWith = 10;
  13. ctx.stroke(); // 调用这个方法执行画笔
  14. </script>

image.pngimage.png

2、闭合路径画三角形:(line)

ctx.begainPath(); 画路径;
ctx.clostPath(); 闭合路径 最后一个点和起始点直接连接

  1. <canvas id="canvas"></canvas>
  2. <script>
  3. const canvas = document.getElementById('canvas');
  4. const ctx = canvas.getContext('2d');
  5. // 参数 x y width height
  6. ctx.beginPath(); // 路径
  7. ctx.strokeStyle = 'orange'; // 画笔的颜色
  8. // 两点确定一条直线
  9. ctx.moveTo(50, 50) // 从哪个位置开始画(起始点)
  10. ctx.lineTo(150, 50) // 画到哪一个位置
  11. ctx.lineTo(100, 100) // x, y
  12. ctx.clostPath(); // 闭合路径; 最后一个点和起始点直接连接
  13. // 控制线的宽度
  14. ctx.lineWith = 10;
  15. ctx.stroke(); // 调用这个方法执行画笔
  16. </script>

image.png

3、画圆(arc)

1、arc(x , y, radius, startAngle, endAngle, anticlockwise )
x, y : 表示圆心的坐标;
radius: 半径
startAngle, endAngle; 表示起始角度和终止角度(pai 180度;顺时针)
anticlockwise :false 方向(默认顺时针如图) false顺时针 true:逆时针

  1. <canvas id="canvas"></canvas>
  2. <script>
  3. const canvas = document.getElementById('canvas');
  4. const ctx = canvas.getContext('2d');
  5. // 参数 x y width height
  6. ctx.beginPath(); // 路径
  7. // ctx.strokeStyle = 'orange'; // 画笔的颜色
  8. ctx.arc(70, 70, 40, 0, (Math.PI / 180) * 90, false) // 图一
  9. ctx.stroke(); // 调用这个方法执行画笔
  10. </script>

image.pngimage.png

画圆弧的路径(arcTo(x1, y1, x2, y2, radius))

(x1, y1); (x2, y2) 控制点
基础点和控制点控制画圆弧

  1. <canvas id="canvas"></canvas>
  2. <script>
  3. const canvas = document.getElementById('canvas');
  4. const ctx = canvas.getContext('2d');
  5. // 参数 x y width height
  6. ctx.beginPath(); // 路径
  7. // ctx.strokeStyle = 'orange'; // 画笔的颜色
  8. ctx.moveTo(150, 20) // 起始点(基础点)
  9. ctx.arcTo(150, 100, 50, 20, 30) // 设置控制点
  10. ctx.lineTo(50, 20) // 设置第二个控制点
  11. ctx.stroke(); // 调用这个方法执行画笔
  12. </script>

image.png

4、贝塞尔曲线

a、2次贝塞尔曲线

方法:ctx.quadraticCurveTo(cpx, cpy, x, y) ;

cp (control pointer) 控制点 (x, y) 终点

  1. <canvas id="canvas"></canvas>
  2. <script>
  3. // 曲线的突起点朝向控制点
  4. const canvas = document.getElementById('canvas');
  5. const ctx = canvas.getContext('2d');
  6. // 参数 x y width height
  7. ctx.beginPath(); // 路径
  8. // ctx.strokeStyle = 'orange'; // 画笔的颜色
  9. ctx.moveTo(50, 20) // 起始点(基础点)
  10. ctx.quadraticCurveTo(230, 30, 50, 100); // (230, 30) 控制点 (50, 100) 终点
  11. ctx.stroke(); // 调用这个方法执行画笔
  12. </script>

image.pngimage.png
image.png

b:3次贝塞尔曲线

方法: ctx.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, x, y )

ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x, y) ( x, y ) 表示结束点

  1. <canvas id="canvas" width="400" height="200"></canvas>
  2. <script>
  3. var cav = document.getElementById('canvas');
  4. let ctx = cav.getContext('2d');
  5. console.log(ctx);
  6. // ctx.stockRect(x, y, width, height)
  7. // ctx.fillStyle = color; ctx.fillRect(x, y, width, height)
  8. // ctx.clearRect(x, y, width, height)
  9. ctx.beginPath();
  10. ctx.moveTo(50, 20);
  11. ctx.bezierCurveTo(200, 30, 150, 100, 50, 100);
  12. ctx.stroke();
  13. // begin pointer
  14. ctx.fillStyle = 'blue';
  15. ctx.fillRect(50, 20, 10, 10);
  16. ctx.fillRect(50, 100, 10,10)
  17. // control pointer
  18. ctx.fillStyle = 'red'
  19. ctx.fillRect(200, 30, 10, 10)
  20. ctx.fillRect(150, 100, 10, 10);
  21. </script>

5、移动translate和保存之前状态

a:ctx.translate(x, y) 可以移动坐标点,再进行绘制

  1. <canvas id="canvas" width="400" height="200"></canvas>
  2. <script>
  3. var cav = document.getElementById('canvas');
  4. let ctx = cav.getContext('2d');
  5. console.log(ctx);
  6. ctx.translate(30, 30); // 移动了点
  7. ctx.fillRect(0, 0, 30, 30)
  8. </script>
  1. <canvas id="canvas" width="400" height="200"></canvas>
  2. <script>
  3. var cav = document.getElementById('canvas');
  4. let ctx = cav.getContext('2d');
  5. console.log(ctx);
  6. ctx.fillRect(0, 0, 30, 30)
  7. ctx.translate(30, 30);
  8. /// 改变下面代码的起始点
  9. // ctx.fillRect(0,0, 30, 30)
  10. </script>

image.pngimage.png

c:ctx.scale(x, y) x轴y轴上的缩放

d:ctx.rotate(Math.PI / 180 * 度数)

image.png

e:ctx.transform(水平缩放,垂直倾斜,水平倾斜,垂直缩放,水平移动,垂直移动)

  1. <canvas id="canvas" width="400" height="200"></canvas>
  2. <script>
  3. var cav = document.getElementById('canvas');
  4. let ctx = cav.getContext('2d');
  5. console.log(ctx);
  6. ctx.transform(1, 1, 0, 1, 0, 0)
  7. ctx.fillRect(0, 0, 50, 50);
  8. /// 改变下面代码的起始点
  9. // ctx.fillRect(0,0, 30, 30)
  10. </script>

image.png

  1. <canvas id="canvas" width="400" height="200"></canvas>
  2. <script>
  3. var cav = document.getElementById('canvas');
  4. let ctx = cav.getContext('2d');
  5. console.log(ctx);
  6. ctx.translate(50, 50);
  7. // ctx.transform(1, 1, 0, 1, 0, 0) 如图二;继承
  8. // 不继承上面,重新设置
  9. ctx.setTransform(1, 1, 0, 1, 0, 0)
  10. ctx.fillRect(0, 0, 50, 50);
  11. /// 改变下面代码的起始点
  12. // ctx.fillRect(0,0, 30, 30)
  13. </script>

image.pngimage.png

ctx.save(); // 保存之前状态 ctx.restore() // 还原到上次保存的状态

  1. <canvas id="canvas" width="400" height="200"></canvas>
  2. <script>
  3. var cav = document.getElementById('canvas');
  4. let ctx = cav.getContext('2d');
  5. console.log(ctx);
  6. ctx.save() // 保存了之前的状态
  7. // 改变canvas原点的位置
  8. ctx.translate(30, 30);
  9. /// 改变下面代码的起始点
  10. ctx.fillRect(0,0, 30, 30)
  11. ctx.restore(); // 还原到上次保存的状态
  12. ctx.fillStyle = 'orange'
  13. ctx.fillRect(0, 0, 30, 30)
  14. </script>

image.png