画板

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script src="./jquery.min.js"></script>
    <style>
      .main {
        width: 800px;
        height: 600px;
        margin: auto;
        border: 1px solid red;
      }
      canvas {
        border: 1px solid blue;
      }
    </style>
  </head>
  <body>
    <div class="main">
      <div class="nav">
        <div>
          <label>颜色</label>
          <input type="color" onchange="changeColor(event)" />
        </div>
        <div>
          <label>线宽</label>
          <select onchange="changeWidth(event)">
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
            <option value="5">5</option>
          </select>
        </div>
        <div class="btns">
          <button data-index="0">画画</button>
          <button data-index="1">橡皮擦</button>
          <button data-index="2">重置画板</button>
          <button data-index="3">保存图片</button>
        </div>
      </div>
      <canvas width="800" height="400"></canvas>
    </div>
    <script>
      let canvas = document.querySelector("canvas");
      let ctx = canvas.getContext("2d");

      let btns = document.querySelectorAll("button");
      btns.forEach(function (btn, i) {
        btn.isSelect = false;
        btn.onclick = function () {
          this.isSelect = true;
          this.style.backgroundColor = "red";
          this.style.color = "white";

          $(this).siblings().css({
            backgroundColor: "lightblue",
            color: "black",
          });
          $(this).siblings().attr("isSelect", false);

          let idx = $(btn).attr("data-index");
          if (idx == 0) {
            isDrawing = true;
            isCa = false;
          } else if (idx == 1) {
            isCa = true;
            isDrawing = false;
          } else if (idx == 2) {
            ctx.clearRect(0, 0, 800, 400);
            document.querySelector("input").value = "black";
            document.querySelector("select").value = 1;
          } else if (idx == 3) {
            let url = canvas.toDataURL();
            window.open(url);
          }
        };
      });

      ctx.strokeStyle = "black";
      ctx.lineWidth = 1;
      ctx.lineCap = "round";

      let isDown = false; // 是否按下
      let isDrawing = false; // 画
      let isCa = false; // 擦
      canvas.onmousedown = function (e) {
        ctx.strokeStyle = "black";
        ctx.lineWidth = 1;
        ctx.lineCap = "round";

        isDown = true;

        // 鼠标按下时的点坐标,就是画笔的起点,需要获取鼠标点相对于画布的坐标点
        let x = e.pageX - this.offsetLeft;
        let y = e.pageY - this.offsetTop;
        ctx.beginPath();
        ctx.moveTo(x, y);
      };

      canvas.onmousemove = function (e) {
        if (isDrawing && isDown) {
          // 获取实时 鼠标相对于画布的坐标点
          let x = e.pageX - this.offsetLeft;
          let y = e.pageY - this.offsetTop;

          ctx.lineTo(x, y);
          ctx.stroke();
        }
        if (isCa && isDown) {
          // 获取鼠标相对于canvas的坐标点
          let x = e.pageX - this.offsetLeft;
          let y = e.pageY - this.offsetTop;
          ctx.clearRect(x - 15, y - 15, 30, 30);
        }
      };

      canvas.onmouseup = function () {
        let select1 = $("button").eq(0)[0].isSelect;
        if (!select1) {
          isDrawing = false;
        }
        let select2 = $("button").eq(1)[0].isSelect;
        if (!select2) {
          isCa = false;
        }
        isDown = false;
      };

      // 画
      function setContent(e) {}

      // 橡皮擦
      function clearContent(e) {
        isCa = true;
        isDrawing = false;
      }

      // 修改颜色
      function changeColor(e) {
        ctx.strokeStyle = e.target.value;
      }

      // 修改线宽
      function changeWidth(e) {
        ctx.lineWidth = e.target.value;
      }

      // 重置
      function resetContent() {
        ctx.clearRect(0, 0, 800, 400);
        document.querySelector("input").value = "black";
        document.querySelector("select").value = 1;
      }
      resetContent();

      // 保存图片
      // function saveContent() {
      //   // toDataURL 将canvas标签上的内容转化为图片 (base64编码后的图片)
      //   let url = canvas.toDataURL();
      //   window.open(url);
      // }
    </script>
  </body>
</html>
posted @ 2020-11-13 22:05  阳菜  阅读(87)  评论(0)    收藏  举报