基于Vue实现手势签名
更新时间:2022年8月29日 22:33 点击:688 作者:qq_38192105
本文实例为大家分享了基于Vue实现手势签名的具体代码,供大家参考,具体内容如下
废话不多说,直接上效果图&源码
代码如下
1. template
<template> <main class="hand-sign-page"> <header class="sign-head">请在下方区域内签名</header> <div id="signContain" :style="{'--back': background}"></div> <footer class="sign-foot"> <button @click="clearCanvas">清除</button> <button @click="saveCanvas">保存</button> </footer> <img v-show="vaildSign" class="sign-img" :src="vaildSign" alt=" "/> </main> </template>
2. js
<script> export default { name: "hand-sign", data() { return { domEl: null,//绘制canvas的父级div canvas: null,//画布 cxt: null,//绘画环境 linewidth:1,//线条粗细,选填 color:"black",//线条颜色,选填 background:"aliceblue",//线条背景,选填 vaildSign: null } }, mounted() { this.initCanvas(); }, methods: { initCanvas() { this.domEl = document.getElementById("signContain"); this.canvas = document.createElement("canvas"); this.domEl.appendChild(this.canvas); this.cxt = this.canvas.getContext("2d"); this.canvas.width = this.domEl.clientWidth; this.canvas.height = this.domEl.clientHeight; this.cxt.fillStyle = this.background; this.cxt.fillRect(0, 0, this.canvas.width, this.canvas.height); this.cxt.strokeStyle = this.color; this.cxt.lineWidth = this.linewidth; //this.cxt.lineCap = "round"; this.clearCanvas();//先清理下 //开始绘制 this.canvas.addEventListener("touchstart", (e) => { this.cxt.beginPath(); this.cxt.moveTo(e.changedTouches[0].pageX - e.target.offsetLeft, e.changedTouches[0].pageY - e.target.offsetTop); }, false); //绘制中 this.canvas.addEventListener("touchmove", (e)=> { this.cxt.lineTo(e.changedTouches[0].pageX - e.target.offsetLeft, e.changedTouches[0].pageY - e.target.offsetTop); this.cxt.stroke(); }, false); //结束绘制 this.canvas.addEventListener("touchend", (e)=> { this.cxt.closePath(); }, false); }, //清除画布 clearCanvas() { this.cxt.clearRect(0, 0, this.canvas.width, this.canvas.height); }, //保存画布 saveCanvas() { console.log(this.blankCanvas());//检查画布是否为空白 if(this.blankCanvas()) { window.alert('请签名'); }else { this.vaildSign = this.canvas.toDataURL(); } }, //canvas非空验证 blankCanvas() { let blank = document.createElement('canvas');//系统获取一个空canvas对象 blank.width = this.canvas.width; blank.height = this.canvas.height; return this.canvas.toDataURL() == blank.toDataURL();//比较值相等则为空 }, } } </script>
3. css
<style lang="less" scoped> .hw(@h, @w: @h) { height: @h; width: @w } .hand-sign-page{ background-color: #fff; .sign-head { text-align: center; padding: 10px; border-bottom: 1px solid #ebebeb; color: #666; font-size: 14px; } #signContain { .hw(400px, 100%); background-color: var(--back); } .sign-foot{ display: flex; justify-content: center; margin: 15px; button { margin: 0 15px; padding: 10px 20px; background-color: #ddd; border-radius: 5px; &:active { background-color: #efefef; } } } .sign-img { .hw(100px, 200px); display: block; margin: 10px auto; } } </style>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞。
原文出处:https://blog.csdn.net/qq_38192105/article/details/124687183
相关文章
- 这篇文章主要介绍了vue中activated的用法,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下...2021-01-03
- 这篇文章主要介绍了Vue基于localStorage存储信息代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-16
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
这篇文章主要介绍了基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23- 这篇文章主要介绍了vue 监听 Treeselect 选择项的改变操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-01
Antd-vue Table组件添加Click事件,实现点击某行数据教程
这篇文章主要介绍了Antd-vue Table组件添加Click事件,实现点击某行数据教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-17- 这篇文章主要介绍了vue 实现动态路由的方法,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-06
- 这篇文章主要介绍了Vue组件跨层级获取组件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-28
- 这篇文章主要介绍了vue treeselect获取当前选中项的label实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-01
- 这篇文章主要介绍了vue 获取到数据但却渲染不到页面上的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-19
- 这篇文章主要给大家介绍了关于Vue中slot-scope的深入理解,这个教程非常适合初学者,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-17
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
这篇文章主要介绍了vuejs element table 表格添加行,修改,单独删除行,批量删除行操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-18antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
这篇文章主要介绍了antdesign-vue结合sortablejs实现两个table相互拖拽排序功能,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-09- 这篇文章主要介绍了Vue 3.0 中 jsx 语法使用,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下...2020-11-13
vue项目页面嵌入代码块vue-prism-editor的实现
这篇文章主要介绍了vue项目页面嵌入代码块vue-prism-editor的实现,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-10-30- 最常见的多环境配置,就是开发环境配置,和生产环境配置,本文主要介绍了vue项目多环境配置的实现,感兴趣的可以了解一下...2021-07-20
- 这篇文章主要介绍了vue cli4.0项目引入typescript的方法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-17
vue Treeselect下拉树只能选择第N级元素实现代码
这篇文章主要介绍了vue Treeselect下拉树只能选择第N级元素实现代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-01- 这篇文章主要为大家详细介绍了vue实现同时设置多个倒计时,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-05-20
Vue 列表页带参数进详情页的操作(router-link)
这篇文章主要介绍了Vue 列表页带参数进详情页的操作(router-link),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-13- 距离 Vue 3.0 正式版发布已经有一段时间了,关于vue3组件库相关的问题还是挺多人感兴趣的,这篇文章主要给大家介绍了关于vue3如何按需加载第三方组件库的相关资料,需要的朋友可以参考下...2021-06-02