zoukankan      html  css  js  c++  java
  • vue做的电子签名

    前段时间,做了一个电子签名的功能:

    我们的项目是要求是在一个url下面进行绘制,然后跳入另一个url的页面进行回显,即显示的页面和绘制的是两个不同的url;

    绘制的电子签名的页面:(贴出来关键性的代码)

    HTML:的代码(兼容pc单的鼠标事件及移动端的touch事件

    js的:
    export default {
    data() {
    return {
    stageInfo:'',
    imgUrl:'',
    client: {},
    points: [],
    canvasTxt: null,
    startX: 0,
    startY: 0,
    moveY: 0,
    moveX: 0,
    endY: 0,
    endX: 0,
    w: null,
    h: null,
    isDown: false,
    isViewAutograph: this.$route.query.isViews > 0,
    contractSuccess: this.$route.query.contractSuccess
    }
    },
    methods: {
    //mobile
    touchStart(ev) {
    ev = ev || event
    ev.preventDefault()
    if (ev.touches.length == 1) {
    let obj = {
    x: ev.targetTouches[0].clienX,
    y: ev.targetTouches[0].clientY,
    }
    this.startX = obj.x
    this.startY = obj.y
    this.canvasTxt.beginPath()
    this.canvasTxt.moveTo(this.startX, this.startY)
    this.canvasTxt.lineTo(obj.x, obj.y)
    this.canvasTxt.stroke()
    this.canvasTxt.closePath()
    this.points.push(obj)
    }
    },
    touchMove(ev) {
    ev = ev || event
    ev.preventDefault()
    if (ev.touches.length == 1) {
    let obj = {
    x: ev.targetTouches[0].clientX - this.stageInfo.left,
    y: ev.targetTouches[0].clientY - this.stageInfo.top
    }
    this.moveY = obj.y
    this.moveX = obj.x
    this.canvasTxt.beginPath()
    this.canvasTxt.moveTo(this.startX, this.startY)
    this.canvasTxt.lineTo(obj.x, obj.y)
    this.canvasTxt.stroke()
    this.canvasTxt.closePath()
    this.startY = obj.y
    this.startX = obj.x
    this.points.push(obj)
    }
    },
    touchEnd(ev) {
    ev = ev || event
    ev.preventDefault()
    if (ev.touches.length == 1) {
    let obj = {
    x: ev.targetTouches[0].clientX - this.stageInfo.left,
    y: ev.targetTouches[0].clientY - this.stageInfo.top
    }
    this.canvasTxt.beginPath()
    this.canvasTxt.moveTo(this.startX, this.startY)
    this.canvasTxt.lineTo(obj.x, obj.y)
    this.canvasTxt.stroke()
    this.canvasTxt.closePath()
    this.points.push(obj)
    }
    },
    //pc
    mouseDown(ev) {
    ev = ev || event
    ev.preventDefault()
    if (1) {
    let obj = {
    x: ev.offsetX,
    y: ev.offsetY
    }
    this.startX = obj.x
    this.startY = obj.y
    this.canvasTxt.beginPath()
    this.canvasTxt.moveTo(this.startX, this.startY)
    this.canvasTxt.lineTo(obj.x, obj.y)
    this.canvasTxt.stroke()
    this.canvasTxt.closePath()
    this.points.push(obj)
    this.isDown = true
    }
    },
    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.canvasTxt.beginPath()
    this.canvasTxt.moveTo(this.startX, this.startY)
    this.canvasTxt.lineTo(obj.x, obj.y)
    this.canvasTxt.stroke()
    this.canvasTxt.closePath()
    this.startY = obj.y
    this.startX = obj.x
    this.points.push(obj)
    }
    },
    mouseUp(ev) {
    ev = ev || event
    ev.preventDefault()
    if (1) {
    let obj = {
    x: ev.offsetX,
    y: ev.offsetY
    }
    this.canvasTxt.beginPath()
    this.canvasTxt.moveTo(this.startX, this.startY)
    this.canvasTxt.lineTo(obj.x, obj.y)
    this.canvasTxt.stroke()
    this.canvasTxt.closePath()
    this.points.push(obj)
    this.points.push({x: -1, y: -1})
    this.isDown = false
    }
    },
    //重写
    overwrite() {
    this.canvasTxt.clearRect(0, 0, this.$refs.canvasF.width, this.$refs.canvasF.height)
    this.points = []
    },
    },
    mounted() {
    let _this = this;
    let canvas = this.$refs.canvasF
    canvas.height = window.screen.availHeight-150;//获取画布的高度
    canvas.width = window.screen.availWidth-50;//获取画布的宽度
    _this.canvasTxt = canvas.getContext('2d');//canvas的初始化
    _this.stageInfo = canvas.getBoundingClientRect();  //getBoundingClientRect()可以不用考虑兼容性
    },

    }
    //获取绘制的base64Data
    this.$refs.canvasF.toDataURL();
    将这个值传给另一个Url,在组件销毁之前,将值传出去
    beforeDestroy () {
    Bus.$emit("setSignature",this.$refs.canvasF.toDataURL());
    },
    另一个url接受参数的过程
    created(){
    Bus.$on("setSignature", content =>{
    this.signatureUrl = content;
    })
    },
    beforeDestroy () {
    Bus.$off('setSignature');
    }

    这样这个过程就可以实现了




  • 相关阅读:
    HttpServletRequest字符集问题
    原码反码补码
    无符号1byte转int
    初识spark的MLP模型
    冗余系统必要性
    shiro的rememberMe不生效
    阅读笔记-异常
    优雅的处理异常
    使用Maven搭建SpringMVC
    Jmeter发送soap请求
  • 原文地址:https://www.cnblogs.com/orange2013/p/11189000.html
Copyright © 2011-2022 走看看