Canvas实现画板

Canvas如何实现画板功能。
在这里插入图片描述

<!DOCTYPE html>
<html>
<head>
  <title>Canvas 画板</title>
  <style>
    canvas {
      border: 1px solid black;
    }
  </style>
</head>
<body>
  <canvas id="canvas" width="800" height="600"></canvas>
  <button id="clear-button">clear-button</button>
  <script>
    // 获取 Canvas 元素和上下文
    var canvas = document.getElementById('canvas');
    var context = canvas.getContext('2d');

    // 设置画笔初始状态
    var isDrawing = false; // 是否正在画线
    var isErasing = false; // 是否正在擦除
    var lastX = 0; // 上一个点的 X 坐标
    var lastY = 0; // 上一个点的 Y 坐标

    // 监听鼠标按下事件
    canvas.addEventListener('mousedown', startDrawing);
    // 监听鼠标移动事件
    canvas.addEventListener('mousemove', draw);
    // 监听鼠标松开事件
    canvas.addEventListener('mouseup', stopDrawing);
    // 监听鼠标离开画布事件
    canvas.addEventListener('mouseleave', stopDrawing);

    // 监听触摸屏按下事件
    canvas.addEventListener('touchstart', startDrawing);
    // 监听触摸屏移动事件
    canvas.addEventListener('touchmove', draw);
    // 监听触摸屏松开事件
    canvas.addEventListener('touchend', stopDrawing);

    // 开始绘制
    function startDrawing(e) {
      isDrawing = true;
      [lastX, lastY] = [e.clientX || e.touches[0].clientX, e.clientY || e.touches[0].clientY];
    }

    // 绘制线条或擦除
    function draw(e) {
      if (!isDrawing) return;

      var newX = e.clientX || e.touches[0].clientX;
      var newY = e.clientY || e.touches[0].clientY;

      if (isErasing) {
        context.clearRect(newX - 10, newY - 10, 20, 20); // 使用橡皮擦大小为 20x20 的矩形来清除画布上的内容
      } else {
        context.beginPath();
        context.moveTo(lastX, lastY);
        context.lineTo(newX, newY);
        context.stroke();
        [lastX, lastY] = [newX, newY];
      }
    }

    // 停止绘制
    function stopDrawing() {
      isDrawing = false;
    }

    // 监听清除按钮点击事件
    var clearButton = document.getElementById('clear-button');
    clearButton.addEventListener('click', clearCanvas);

    // 清除画布
    function clearCanvas() {
      context.clearRect(0, 0, canvas.width, canvas.height);
    }
  </script>
</body>
</html>
  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值