美文网首页
手写签名

手写签名

作者: 萝卜缨女王 | 来源:发表于2022-12-06 17:28 被阅读0次
    <template>
      <div class="hello">
        <button type v-on:click="clear">清除</button>
        <button v-on:click="save">保存</button>
        <canvas id="canvas" width="375" height="600" style="float:left">Canvas画板</canvas>
        <img v-bind:src="url" alt />
      </div>
    </template>
    <script>
    var draw;
    var preHandler = function(e) {
      e.preventDefault();
    };
    class Draw {
      constructor(el) {
        this.el = el;
        this.canvas = document.getElementById(this.el);
        this.cxt = this.canvas.getContext("2d");
        this.stage_info = canvas.getBoundingClientRect();
        this.path = {
          beginX: 0,
          beginY: 0,
          endX: 0,
          endY: 0
        };
      }
      init(btn) {
        var that = this;
        this.canvas.addEventListener("touchstart", function(event) {
          document.addEventListener("touchstart", preHandler, false);
          that.drawBegin(event);
        });
        this.canvas.addEventListener("touchend", function(event) {
          document.addEventListener("touchend", preHandler, false);
          that.drawEnd();
        });
        this.clear(btn);
      }
      drawBegin(e) {
        var that = this;
        window.getSelection()
          ? window.getSelection().removeAllRanges()
          : document.selection.empty();
        this.cxt.strokeStyle = "#000";
        this.cxt.beginPath();
        this.cxt.moveTo(
          e.changedTouches[0].clientX - this.stage_info.left,
          e.changedTouches[0].clientY - this.stage_info.top
        );
        this.path.beginX = e.changedTouches[0].clientX - this.stage_info.left;
        this.path.beginY = e.changedTouches[0].clientY - this.stage_info.top;
        canvas.addEventListener("touchmove", function() {
          that.drawing(event);
        });
      }
      drawing(e) {
        this.cxt.lineTo(
          e.changedTouches[0].clientX - this.stage_info.left,
          e.changedTouches[0].clientY - this.stage_info.top
        );
        this.path.endX = e.changedTouches[0].clientX - this.stage_info.left;
        this.path.endY = e.changedTouches[0].clientY - this.stage_info.top;
        this.cxt.stroke();
      }
      drawEnd() {
        document.removeEventListener("touchstart", preHandler, false);
        document.removeEventListener("touchend", preHandler, false);
        document.removeEventListener("touchmove", preHandler, false);
      }
      clear(btn) {
        this.cxt.clearRect(0, 0, 300, 600);
      }
      save() {
        return canvas.toDataURL("image/png");
      }
    }
    export default {
      data() {
        return {
          msg: "Welcome to Your Vue.js App",
          val: true,
          url: ""
        };
      },
      mounted() {
        draw = new Draw("canvas");
        draw.init();
      },
      methods: {
        clear: function() {
          draw.clear();
        },
        save: function() {
          var data = draw.save();
          this.url = data;
          console.log(data);
        },
        mutate(word) {
          this.$emit("input", word);
        }
      }
    };
    </script>
    

    相关文章

      网友评论

          本文标题:手写签名

          本文链接:https://www.haomeiwen.com/subject/pmfgfdtx.html