Skip to content

Drawing Board ​

1. 实现效果 ​

宽度

2. 具体实现 ​

这个主要是基于canvas 实现的. 正巧昨天中午看b站看到一个关于canvas 的入门视频, 然后想到之前看到这个项目里有这个白板, 所以就根据视频里面的知识把这个实现出来了.

在实现的过程中, 主要是找到canvas 元素, 获取上面的ctx 也就是画笔, 然后对其进行监听, 随后调用canvas 的内置方法进行路径描绘. 如下代码所示

javascript
const canvas = document.querySelector('canvas')
const ctx = canvas.getContext('2d')
ctx.fillStyle = '#fff'

// 主要绘画方法
function draw(startX, startY, endX, endY) {
  // 开始绘画
  ctx.beginPath()
  // 设置起点: 由于是连续绘画, 所以设置起点为上次落点
  ctx.moveTo(startX, startY)
  ctx.strokeStyle = color
  ctx.lineWidth = width.value || 5
  // 这里主要是为了画出来的线条是平滑的
  ctx.lineCap = 'round'
  ctx.lineTo(endX, endY)
  // 描边
  ctx.stroke()
  // 结束绘画
  ctx.closePath()
}

// 监听是否按下鼠标: 开始绘画
canvas.onmousedown = (e) => {
  startX = e.offsetX
  startY = e.offsetY
  paining = true
}

// 监听是否抬起鼠标: 结束绘画
canvas.onmouseup = () => {
  paining = false
}

// 监听鼠标是否移动: 根据移动路径进行绘画, 同时更新鼠标路径
canvas.onmousemove = (e) => {
  if (paining) {
    draw(startX, startY, e.offsetX, e.offsetY)
    startX = e.offsetX
    startY = e.offsetY
  }
}