Day 4 - 用 canvas 复刻 小画家 填入色彩, 橡皮擦

填满色彩

在点击画布时,使用 fillStyle 先填上颜色,再覆盖整个画布

/**
* 滑鼠点下画布後开始画画 or 填满
*/
const handleMouseDown = () => {
  setIsDrawing(true);
  if (tool === "fillColor") {
    fillCanvas();
  }
};

/**
* 填满色彩
*/
const fillCanvas = () => {
  const ctx = canvasRef.current.getContext("2d");
  ctx.fillStyle = activeColor;
  ctx.fillRect(0, 0, 500, 500);
};

橡皮擦

与画笔操作相似,不过使用的是 clearRect,操作更简易

  ctx.clearRect(x, y, width, height);

第一个与第二个参数为需要清除的位置,第三四个为尺寸。

const handleDrawCanvas = (point: { x: number; y: number }) => {
  const ctx = canvasRef.current.getContext("2d");
  switch (tool) {
    case "eraser": // 橡皮擦
      ctx.clearRect(point?.x, point?.y, 10, 10);
      break;
    case "pencil":
     // 同上方画笔
  }
  pointsArray = [...pointsArray, point];
};

检视

最後呈现本篇章功能~

https://i.imgur.com/rxoup1T.gif


<<:  Day4 PHP 基本撰写概念

>>:  [Day19] 为什麽都没有 Google Map 评论抽奖器? 只好用Python做一个了!

Day4-Go Go Go!第一只 golang!

Hello rookie! 在经过昨天安装完环境後,相信大家已经迫不及待要写第一支程序了吧。 相信大...

Day 12 - 安装(二)Topology

前一篇提到可以利用指令tiup cluster template > topology.yam...

Day07:07 - User服务(2) - 前端 - 注册、登入、JS正则表达式

Hi,Привет,我是Charlie! 在Day06当中,我们完成了後端的基本注册、登入,在今天我...

JavaScript Day 5. 型别辨识 typeof

偶尔程序也会碰到需要辨别变数的状态,有时候是用於防止使用者输入奇怪的文字,有时候是帮助自己确认变数的...

Day5-React Hook 篇-认识 useContext

让开发者可以更容易的从母元件传递 state 到深层的子元件,并让多个用到的 state 资料的元件...