基于canvas实现手写签名(vue)

最近一直在研究canvas的东西,正好之前对手写签名这块有点兴趣。就自己基于vue写了一个简易的手写签名demo。

其中原理比较简单,先生成一个canvas画布,并对canvas进行touchstart和touchmove事件进行监听。当监听touchstart事件被触发时,我们开始触发canvas里的beginPath事件并且设置moveTo原始点。当监听touchmove事件则去不断去触发lineTo事件,最后stroke()。

demo里还有清除签名和保存签名的功能,分别对应了clearRect()和toDataURL()方法。

具体的demo代码如下:

<template>

<div>

<canvas id="canvas" width="300" height="150">

</canvas>

<div class="btn">

<span @click="toClear()">清除</span>

<span @click="toSave()">保存</span>

</div>

</div>

</template>

<script>

export default {

name: "sign-name",

data(){

return {

ctx:null,

canvas:null

}

},

mounted() {

this.initPage()

},

methods:{

initPage() {

this.canvas = document.getElementById('canvas')

if(this.canvas.getContext){

this.ctx = this.canvas.getContext('2d')

let background = "#ffffff"

this.ctx.lineCap = 'round'

this.ctx.fillStyle = background

this.ctx.lineWidth = 2

this.ctx.fillRect(0,0,350,150)

this.canvas.addEventListener("touchstart",(e)=>{

console.log(123,e)

this.ctx.beginPath()

this.ctx.moveTo(e.changedTouches[0].pageX,e.changedTouches[0].pageY)

})

this.canvas.addEventListener("touchmove",(e)=>{

this.ctx.lineTo(e.changedTouches[0].pageX,e.changedTouches[0].pageY)

this.ctx.stroke()

})

}

},

toClear() {

this.ctx.clearRect(0,0,300,150)

},

toSave() {

let base64Img = this.canvas.toDataURL()

console.log(123,base64Img)

}

}

}

</script>

<style lang="scss" scoped>

.btn {

height: px2Vw(55);

position: fixed;

bottom: 0;

line-height: px2Vw(55);

border-top: px2Vw(1) solid #f7f8f9;

span {

display: inline-block;

width: px2Vw(185);

text-align: center;

}

}

canvas {

position: fixed;

border: 2px dashed #cccccc;

float: right;

}

</style>

代码运行后的效果图如下:

这只是个简易的demo,肯定会有很多未考虑到的地方。demo的下载地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是 基于canvas实现手写签名(vue) 的全部内容, 来源链接: utcz.com/p/237303.html

回到顶部