vue使用canvas实现移动端手写签名
作者:95後开发妹纸~ 发布时间:2024-10-28 16:52:46
标签:vue,canvas,手写签名
基于vue使用canvas实现移动端手写签名!
之前自己开发有这么一个需求,需要实现手写签名,然后以图片的形式保存生成图片的base64数据流 。自己在网上找了一堆,都不是很完美。然后参考网上的加自己的优化和修改做了一版。希望有需要的朋友可以拿来直接用。
HTML部分:
<template>
<div class="hello" >
<div>请输入您的签名7:</div>
<canvas id="canvas" ref="canvasW" width="373" height="200" style="border:1px solid black" >Canvas画板</canvas>
<img v-bind:src="url" alt="">
<div>
<button type="" v-on:click="clear">重写</button>
<button v-on:click="save">保存签名</button>
</div>
</div>
</template>
为了节约时间,样式写的比较简单。凑合看吧!
script部分
<script>
var draw;
var preHandler = function(e){e.preventDefault();}
class Draw {
constructor(el) {
this.el = el
this.canvas = document.getElementById(this.el)
this.cxt = this.canvas.getContext('2d')
this.stage_info = canvas.getBoundingClientRect()
this.path = {
beginX: 0,
beginY: 0,
endX: 0,
endY: 0
}
}
init(btn) {
var that = this;
//初始化生成
this.canvas.addEventListener('touchstart', function(event) {
document.addEventListener('touchstart', preHandler, false);
that.drawBegin(event)
})
this.canvas.addEventListener('touchend', function(event) {
document.addEventListener('touchend', preHandler, false);
that.drawEnd()
})
this.clear(btn)
}
drawBegin(e) {
var that = this;
window.getSelection() ? window.getSelection().removeAllRanges() : document.selection.empty()
this.cxt.strokeStyle = "#000"
this.cxt.beginPath()
this.cxt.moveTo(
e.changedTouches[0].clientX - this.stage_info.left,
e.changedTouches[0].clientY - this.stage_info.top
)
this.path.beginX = e.changedTouches[0].clientX - this.stage_info.left
this.path.beginY = e.changedTouches[0].clientY - this.stage_info.top
canvas.addEventListener("touchmove",function(ev){
ev.preventDefault()
that.drawing(event)
})
}
drawing(e) {
this.cxt.lineTo(
e.changedTouches[0].clientX - this.stage_info.left,
e.changedTouches[0].clientY - this.stage_info.top
)
this.path.endX = e.changedTouches[0].clientX - this.stage_info.left
this.path.endY = e.changedTouches[0].clientY - this.stage_info.top
this.cxt.stroke()
}
drawEnd() {
document.removeEventListener('touchstart', preHandler, false);
document.removeEventListener('touchend', preHandler, false);
document.removeEventListener('touchmove', preHandler, false);
}
clear(btn) {
this.cxt.clearRect(0, 0, this.stage_info.width, this.stage_info.height)
// this.cxt.clearRect(0, 0, 373, 200)
}
save(){
return canvas.toDataURL("image/png")
console.log(canvas.toDataURL("image/png"))
}
}
export default {
data () {
return {
msg: '啦啦啦',
val:true,
url:""
}
},
mounted() {
draw=new Draw('canvas');
draw.init();
},
methods:{
clear:function(){
draw.clear();
// 用于点击清除画布时,同时清除上次保存的图片
this.save()
},
save:function(){
var data=draw.save();
this.url = data;
// 生成图片的base64数据流
},
mutate(word){
this.$emit("input", word);
},
}
}
</script>
css部分
<style scoped lang="less">
.hello{
height: 100%;
width: 100%;
background: #ccc;
h1, h2 { font-weight: normal; }
ul { list-style-type: none; padding: 0; }
li { display: inline-block; margin: 0 10px; }
a { color: #42b983; }
#canvas { background: pink; cursor: default; }
#keyword-box { margin: 10px 0; }
button{font-size: 0.2rem;color: blue;}
}
效果图:
就到这里吧!
来源:https://blog.csdn.net/weixin_47679798/article/details/108695258


猜你喜欢
- 数据规整化:合并、清理、过滤pandas和python标准库提供了一整套高级、灵活的、高效的核心函数和算法将数据规整化为你想要的形式!本篇博
- ??本文核心:setup()概念、 reactive()的使用【前言】vue3作为vue2的升级版,有着很多的新特性,其中就包括了组合式AP
- 展示import tkinter if __name__ == '__main__': win =
- 代码如下import osimport cv2for i in range(1,201): if i==169 or i==18
- defer关键字defer关键字可以让函数或语句延迟到函数语句块的最结尾时,即即将退出函数时执行,即便函数中途报错结束、即便已经panic(
- 前言数据库生成环境中经常会遇到表中有重复的数据,或者进行关联过程中产生重复数据,下面介绍三种剔除重复数据的方法,请针对自己的应用场景选择使用
- 前言深度学习领域,常常用python写代码,而且是建立在一些开源框架之上,如pytorch。在实际的项目部署中,也有用conda环境和pyt
- 本文实例为大家分享了文字无缝滚动效果,供大家参考,具体内容如下html<dl id="marquee" class
- 这篇文章主要介绍Python的numpy库中的一些函数,做备份,以便查找。(1)将矩阵转换为列表的函数:numpy.matrix.tolis
- 流动网页设计有很多好处,但也只有在正确使用的时候。合适的技巧会使页面在大屏幕、小屏幕抑、PDA小屏幕上都能得到良好的呈现。但是,糟糕的代码结
- 前言在Vue组件库开发过程中,Vue组件之间的通信一直是一个重要的话题,虽然官方推出的 Vuex 状态管理方案可以很好的解决组件之间的通信问
- 什么是机器学习 (Machine Learning) 机器学习是研究计算机怎样模
- vue.js 教程Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架。Vue 只关注视图层, 采用自底向
- 前言最近在搜寻资料时,发现了一则10年前的新闻:二维码将成线上线下关键入口。从今天的移动互联网来看,支付收款码/健康码等等与我们息息相关,二
- pyinstaller打包问题简单介绍一下pyinstaller常用的参数:可选参数示例说明-Fpyinstaller -F demo.py
- 之前就想要把一些 SQL 的常用函数记录下来,不过一直没有实行。。。嘿嘿。。。直到今天用到substring()这个函数,C# 里面这个方法
- 这篇博客是自己《数据挖掘与分析》课程讲到正则表达式爬虫的相关内容,主要简单介绍Python正则表达式爬虫,同时讲述常见的正则表达式分析方法,
- 在推广Web标准的今天,那些崇尚Web标准的人经常说XHTML比HTML更加严格,当然从某种意义上说是的,比如它要求所有的标签关闭并且所有的
- 第一次发博客,还有点小激动,本人现在正在天津上大学,希望以后从事前端这一行业,学习的时间不长,写博客为了记录自己的学习过程和收获,当然也算是
- Python中乱码问题是一个很头痛的问题。在Python3中,对中文进行了全面的支持,但在Python2.x中需要进行相关的设置才能使用中文