基于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