canvas基础 | 青训营笔记

52 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 一 天

1. 绘制矩形

  1. fillRect(x, y, width, height)

绘制一个填充的矩形

  1. strokeRect(x, y, width, height)

绘制一个矩形的边框

  1. clearRect(x, y, width, height)

清除指定矩形区域,让清除部分完全透明。

2. 绘制路径beginPath()等

  1. beginPath()

新建一条路径,生成之后,图形绘制命令被指向到路径上生成路径。

  1. closePath()

闭合路径之后图形绘制命令又重新指向到上下文中。

  1. stroke()

通过线条来绘制图形轮廓。

  1. fill()

通过填充路径的内容区域生成实心的图形。

3. 移动笔触moveTo(x, y)

moveTo(x, y)

将笔触移动到指定的坐标 x 以及 y 上。

function draw() {
  var canvas = document.getElementById('canvas');
  if (canvas.getContext){
    var ctx = canvas.getContext('2d');

    ctx.beginPath();
    ctx.arc(75, 75, 50, 0, Math.PI * 2, true); // 绘制
    ctx.moveTo(110, 75);
    ctx.arc(75, 75, 35, 0, Math.PI, false);   // 口 (顺时针)
    ctx.moveTo(65, 65);
    ctx.arc(60, 65, 5, 0, Math.PI * 2, true);  // 左眼
    ctx.moveTo(95, 65);
    ctx.arc(90, 65, 5, 0, Math.PI * 2, true);  // 右眼
    ctx.stroke();
  }
}

4. 线lineTo(x, y)

lineTo(x, y)

绘制一条从当前位置到指定 x 以及 y 位置的直线。

该方法有两个参数:x 以及 y,代表坐标系中直线结束的点。开始点和之前的绘制路径有关,之前路径的结束点就是接下来的开始点。开始点也可以通过moveTo()函数改变。

function draw() {
  var canvas = document.getElementById('canvas');
  if (canvas.getContext){
  var ctx = canvas.getContext('2d');

  // 填充三角形
  ctx.beginPath();
  ctx.moveTo(25, 25);
  ctx.lineTo(105, 25);
  ctx.lineTo(25, 105);
  ctx.fill();

  // 描边三角形
  ctx.beginPath();
  ctx.moveTo(125, 125);
  ctx.lineTo(125, 45);
  ctx.lineTo(45, 125);
  ctx.closePath();
  ctx.stroke();
  }
}

这里从调用beginPath()函数准备绘制一个新的形状路径开始。然后使用moveTo()函数移动到目标位置上。然后下面,两条线段绘制后构成三角形的两条边。

你会注意到填充与描边三角形步骤有所不同。正如上面所提到的,因为路径使用填充(fill)时,路径自动闭合,使用描边(stroke)则不会闭合路径。如果没有添加闭合路径closePath()到描边三角形函数中,则只绘制了两条线段,并不是一个完整的三角形。

5. 圆弧arc(x, y, radius, startAngle, endAngle, anticlockwise)

1. arc(x, y, radius, startAngle, endAngle, anticlockwise)

画一个以(x,y)为圆心的以 radius 为半径的圆弧(圆),从 startAngle 开始到 endAngle 结束,按照 anticlockwise 给定的方向(默认为顺时针)来生成。

x,y为绘制圆弧所在圆上的圆心坐标。radius为半径。startAngle以及endAngle参数用弧度定义了开始以及结束的弧度。这些都是以 x 轴为基准。参数anticlockwise为一个布尔值。为 true 时,是逆时针方向,否则顺时针方向。

  1. arcTo(x1, y1, x2, y2, radius)(不推荐)

根据给定的控制点和半径画一段圆弧,再以直线连接两个控制点。

二次贝塞尔曲线及三次贝塞尔曲线quadraticCurveTo(cp1x, cp1y, x, y)

1. quadraticCurveTo(cp1x, cp1y, x, y)

绘制二次贝塞尔曲线,cp1x,cp1y 为一个控制点,x,y 为结束点。

2. bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)

绘制三次贝塞尔曲线,cp1x,cp1y为控制点一,cp2x,cp2y为控制点二,x,y为结束点。