canvas根据点绘制多边形

const canvas = {
  ctx: null,
  arr: [],
  isTrue: true,
  draw: (canvasEl) => {
    canvas.arr = [];
    canvas.ctx = canvasEl.getContext("2d");
    canvasEl.onclick = (ev) => {
      if (!canvas.isTrue) {
        return;
      }
      if (canvas.arr.length > 1) {
        if (
          ev.offsetX <= canvas.arr[0].x + 10 &&
          ev.offsetX >= canvas.arr[0].x - 10 &&
          ev.offsetY <= canvas.arr[0].y + 10 &&
          ev.offsetY >= canvas.arr[0].y - 10
        ) {
          canvas.arr.push({
            x: canvas.arr[0].x,
            y: canvas.arr[0].y,
            circle: false,
          });
        } else {
          canvas.arr.push({
            x: ev.offsetX,
            y: ev.offsetY,
            circle: true,
          });
        }
      } else {
        canvas.arr.push({
          x: ev.offsetX,
          y: ev.offsetY,
          circle: true,
        });
      }
      canvas.ctx.clearRect(0, 0, canvasEl.width, canvasEl.height);
      canvas.arr.forEach((el, index) => {
        canvas.ctx.beginPath();
        if (el.circle) {
          canvas.ctx.arc(el.x, el.y, 3, 0, Math.PI * 2, true);
        }
        canvas.ctx.fillStyle = "rgba(237, 241, 192)";
        canvas.ctx.fill();
      });
      canvas.ctx.beginPath();
      canvas.arr.forEach((el, index) => {
        if (index == 0) {
          canvas.ctx.moveTo(el.x, el.y);
        } else {
          canvas.ctx.lineTo(el.x, el.y);
        }
      });
      canvas.ctx.fillStyle = "rgba(237, 241, 192,0.5)";
      canvas.ctx.strokeStyle = "#fff100";
      canvas.ctx.stroke();
      if (canvas.arr.length > 1) {
        if (
          canvas.arr[canvas.arr.length - 1].x <= canvas.arr[0].x + 10 &&
          canvas.arr[canvas.arr.length - 1].x >= canvas.arr[0].x - 10 &&
          canvas.arr[canvas.arr.length - 1].y <= canvas.arr[0].y + 10 &&
          canvas.arr[canvas.arr.length - 1].y >= canvas.arr[0].y - 10
        ) {
          canvas.ctx.fill();
          canvas.isTrue = false;
        }
      }
    };
  },
  clearDraw(canvasEl) {
    canvas.arr = [];
    canvas.isTrue = true;
    if (canvas.ctx) {
      canvas.ctx.clearRect(0, 0, canvasEl.width, canvasEl.height);
    }
  }
}
export default canvas
//直接引入调用draw方法传入元素就可以在元素中绘制了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值