• canvas签名


    <template>
        <div class="share" style="background:#fff">
            <div class="zk-title">
              请工整的书写 <span style="color:#06F;">独孤求败</span> 的签字
            </div>
            <!-- <div style="100px;height:100px"><img src="" width="40px" height="40px" id="test"/>88</div> -->
            <div class="canvasBox" ref="canvasHW">
                <canvas @touchstart='touchStart'
                        @touchmove='touchMove'
                        @touchend='touchEnd'
                        @mousedown="mouseDown"
                        @mousemove="mouseMove"
                        @mouseup="mouseUp"
                        ref="canvasF">
                </canvas>
            </div>
            <div class="btnBox">
                <button class="clear" @click="overwrite">清除</button>
                <button class="confirm" @click="commit">确认</button>
                <button class="cancel" @click="cancel">取消</button>
            </div>
        </div>
    </template>
    <script>
    export default {
      name: 'signature',
      data () {
        return {
          points: [],
          startX: 0,
          startY: 0,
          moveY: 0,
          moveX: 0,
          endY: 0,
          endX: 0,
          w: null,
          h: null,
          imgData: '',
          isDown: false,
          canvasBoard: null,
          canvasContext: null
        }
      },
      mounted () {
        this.canvasBoard = this.$refs.canvasF;
        this.canvasBoard.height = this.$refs.canvasHW.offsetHeight;
        this.canvasBoard.width = this.$refs.canvasHW.offsetWidth;
        var ctx = this.canvasBoard.getContext('2d');
        this.canvasContext = ctx;
        ctx.lineWidth=3;
        ctx.font = "Arial";
      },
    
      methods: {
          back(){
    
          },
        // Computer event -- Mouse down
        mouseDown (ev) {
          ev = ev || event
          ev.preventDefault()
          console.log(ev)
    
          let obj = {
            x: ev.offsetX,
            y: ev.offsetY
          }
    
          console.log(obj)
          this.startX = obj.x
          this.startY = obj.y
          this.canvasContext.beginPath()
          this.canvasContext.moveTo(this.startX, this.startY)
          this.canvasContext.lineTo(obj.x, obj.y)
          this.canvasContext.stroke()
          this.canvasContext.closePath()
          this.points.push(obj)
          this.isDown = true
        },
    
        // Mobile event -- Touch start
        touchStart (ev) {
          ev = ev || event
          ev.preventDefault()
          if (ev.touches.length === 1) {
            let obj = {
              x: ev.targetTouches[0].clientX,
              y: ev.targetTouches[0].clientY - 0//0为y轴的偏移量
            }
    
            this.startX = obj.x
            this.startY = obj.y
            this.canvasContext.beginPath()
            this.canvasContext.moveTo(this.startX, this.startY)
            this.canvasContext.lineTo(obj.x, obj.y)
            this.canvasContext.stroke()
            this.canvasContext.closePath()
            this.points.push(obj)
          }
        },
    
        // Mobile -- Mouse move
        mouseMove (ev) {
          ev = ev || event
          ev.preventDefault()
          if (this.isDown) {
            let obj = {
              x: ev.offsetX,
              y: ev.offsetY
            }
    
            this.moveY = obj.y
            this.moveX = obj.x
            this.canvasContext.beginPath()
            this.canvasContext.moveTo(this.startX, this.startY)
            this.canvasContext.lineTo(obj.x, obj.y)
            this.canvasContext.stroke()
            this.canvasContext.closePath()
            this.startY = obj.y
            this.startX = obj.x
            this.points.push(obj)
          }
        },
    
        // Mobile event -- Touch move
        touchMove (ev) {
          ev = ev || event
          ev.preventDefault()
          if (ev.touches.length === 1) {
            let obj = {
              x: ev.targetTouches[0].clientX,
              y: ev.targetTouches[0].clientY - 0
            }
    
            this.moveY = obj.y
            this.moveX = obj.x
            this.canvasContext.beginPath()
            this.canvasContext.moveTo(this.startX, this.startY)
            this.canvasContext.lineTo(obj.x, obj.y)
            this.canvasContext.stroke()
            this.canvasContext.closePath()
            this.startY = obj.y
            this.startX = obj.x
            this.points.push(obj)
          }
        },
    
        // Computer event -- Mouse up
        mouseUp (ev) {
          ev = ev || event
          ev.preventDefault()
    
          let obj = {
            x: ev.offsetX,
            y: ev.offsetY
          }
    
          this.canvasContext.beginPath()
          this.canvasContext.moveTo(this.startX, this.startY)
          this.canvasContext.lineTo(obj.x, obj.y)
          this.canvasContext.stroke()
          this.canvasContext.closePath()
          this.points.push(obj)
          this.points.push({x: -1, y: -1})
          this.isDown = false
        },
    
        // Mobile event TouchEnd
        touchEnd (ev) {
          ev = ev || event
          ev.preventDefault()
          console.log(ev)
          if (ev.touches.length === 1) {
            let obj = {
              x: ev.targetTouches[0].clientX,
              y: ev.targetTouches[0].clientY - 0
            }
    
            this.canvasContext.beginPath()
            this.canvasContext.moveTo(this.startX, this.startY)
            this.canvasContext.lineTo(obj.x, obj.y)
            this.canvasContext.stroke()
            this.canvasContext.closePath()
            this.points.push(obj)
            this.points.push({x: -1, y: -1})
          }
        },
    
        // Over write
        overwrite () {
          // this.canvasBoard.height
          // this.canvasBoard.width
          this.canvasContext.clearRect(0, 0, this.$refs.canvasF.width, this.$refs.canvasF.height);
          this.points = [];
        },
    
        // Commit
        commit () {
          // this.$refs.mySignature.src = this.$refs.canvasF.toDataURL('image/png')
          //this.$store.state.currentSignatureData = this.$refs.canvasF.toDataURL('image/png');
          var imgdata = this.$refs.canvasF.toDataURL('image/png');
          // var vertical = true;
          // var imgdata = signaturePad.toDataURL(); // base64
          //alert(Vertical);
          // this.upload(imgdata, Vertical);
          // 当Vertical为true的时候,后台需要转90度;
          // 当Vertical为false的时候,后台不需要转;
          document.getElementById('test').src=imgdata;
          this.$router.back();
        },
         upload(imgdata, vertical) {
            // $("#clearButton,#backBtn,#subBtn").hide(); 	
            //alert("v:"+vertical);
            $.ajax({
              type : 'POST',
              dataType : 'json',
              url : $("#url").val(),
              data : {
                media : imgdata,
                v : vertical,
                res_code:$("#resCode").val(),
                clientId:$("#clientId").val()
                
              },
              success : function(data) {
    
                if (data['error'] != null) {
                  alert(data['error']);
                  $("#clearButton,#backBtn,#subBtn").show();
                  $("#msg").hide();
                } else {
          
                  if (data.url!=null)
                    location.href = data.url;
                  else
                    { 
                    $("#msg").hide();
                    alert("签署成功");
                    }
                }
    
              },
              error : function() {
                alert("错误:" + error);
                $("#clearButton,#backBtn,#subBtn").show();
                $("#msg").hide();
              }
            });
          },
        cancel(){
          this.$router.back();
        }
      }
    }
    </script>
    <style lang="stylus" scoped>
     .share
        position absolute
        top 0
        bottom 0
        left 0
        right 0
        z-index 15
        background #fff
    
    </style>
    
    <style scoped>
      .signatureBox{
        position: absolute;
        top: 0;
        left: 0;
         100%;
        height: 100%;
        box-sizing: border-box;
        overflow: hidden;
        background: #fff;
        z-index: 100;
        display: flex;
        flex-direction: column;
      }
    
      .visaDetailTop p{
        margin: 0;
        text-align: center;
        color: #000;
        font-size: 1em;
        position: relative;
      }
    
      .visaDetailTop p span{
        color: #fff;
        font-size: 1.2em;
      }
    
      .visaDetailTop p:first-of-type{
        float: left;
      }
    
      .visaDetailTop p:nth-of-type(2){
        float: right;
      }
    
      .canvasBox{
        position: absolute;
        left: 0;
        top: 0;
        bottom: 0;
        right: 0;
        box-sizing: border-box;
        flex: 1;
        font-family: 'Helvetica, Sans-Serif';
        font-size: 16px;
      }
    
      .btnBox{
        height: 30px;
        padding: 5px;
        text-align: right;
        line-height: 30px;
      }
      .btnBox button{
        border: 1px solid lightgray;
        color: #fff;
        border-radius: 4px;
        padding: 5px 10px;
         60px;
        outline:none;
      }
    .zk-title {
        position: absolute;
        right: -85px;
        top: 85px;
        font-size: 16px;
        -webkit-transform: rotate(90deg);
        -ms-transform: rotate(90deg);
        transform: rotate(90deg);
    }
    canvas {
        position: absolute;
        left: 0;
        top: 0;
         100%;
        height: 100%;
        border-radius: 4px;
        box-shadow: 0 0 5px rgba(0, 0, 0, 0.02) inset;
    }
    
    .btnBox {
        position: absolute;
        left: -68px;
        bottom: 90px;
        -webkit-transform: rotate(90deg);
        -ms-transform: rotate(90deg);
        transform: rotate(90deg);
    }
    .btnBox .clear{
      background: #808080;
    }
    .btnBox .confirm{
      background: #04BE02;
    }
    .btnBox .cancel{
      background: #39F;
    }
      @media only screen and (min- 750px){
        .signatureBox{
          position: absolute;
          top: 0;
          left: 0;
           100%;
          min-height: 100%;
          box-sizing: border-box;
          overflow: visible;
        }
      }
    </style>
    

      

  • 相关阅读:
    安装activeMQ(解压版)
    java匿名发送邮件(不需要登录)
    poi excel导入整数数字自动加小数点解决
    读取excel表中的数据
    DES加密解密实现
    验证码实现(google)
    下载文件到电脑本地
    Properties条件查询(适用于StorageAPI操作数据库)
    java位运算
    python测试开发工具库汇总(转载)
  • 原文地址:https://www.cnblogs.com/cx709452428/p/9767813.html
Copyright © 2020-2023  润新知