网站优化

图书店微信小程序_基于canvas完成手写签名(vue)

作者:admin 发布时间:2021-01-05
基于canvas实现手写签名(vue)       这篇文章主要为大家详细介绍了基于canvas实现简易的手写签名,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

最近一直在研究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 
 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 #;
 float: right;
 /style 

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

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

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



收缩