在vue中设计一个客户签名的功能
直接贴代码:
<template>
<div class="hello">
<p>签字:</p>
<canvas id="canvas" width="300" height="400">Canvas画板</canvas>
<button style="background: #fff;color:#F7B932" @click="clear">清除</button>
<button style="background: #F7B932;color:#fff" @click="save">保存</button>
<p style="width:100%;height: .2rem"></p>
</div>
</template>
<script>
let draw;
let 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) {
let 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) {
let 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(){
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, 400, 600)
}
save(){
return canvas.toDataURL("image/png")
}
}
export default {
data () {
return {
msg: 'Welcome to Your Vue.js App',
val:true
}
},
mounted() {
draw = new Draw('canvas');
draw.init(); //获取屏幕的宽度
let clientWidth = document.documentElement.clientWidth;
let clientHeight = document.documentElement.clientHeight;
//根据设计图中的canvas画布的占比进行设置
let canvasWidth = Math.floor(clientWidth*200/220);
let canvasHeight = Math.floor(clientHeight*200/320);
canvas.setAttribute('width',canvasWidth+'px');
canvas.setAttribute('height',canvasHeight+'px');
},
methods:{
clear:function(){
draw.clear();
},
save:function(){
let data=draw.save();
const _this = this
_this.postRequestN9(‘’, {
pkInspection: this.$route.params.pkInspection,
pkInspectionRecord:this.$route.params.pkInspectionRecord,
clientSignStr:data,
accountCode:this.$route.params.accountCode
}, function (data) {
alert('保存成功')
_this.$router.push({name: ''})
})
},
// 将base64转换成file对象
// dataURLtoFile (dataurl, filename = 'qianming') {
// let arr = dataurl.split(',')
// let mime = arr[0].match(/:(.*?);/)[1]
// let suffix = mime.split('/')[1]
// let bstr = atob(arr[1])
// let n = bstr.length
// let u8arr = new Uint8Array(n)
// while (n--) {
// u8arr[n] = bstr.charCodeAt(n)
// }
// return new File([u8arr], `${filename}.${suffix}`, {type: mime})
// },
mutate(word) {
this.$emit("input", word);
},
}
}
</script> <style scoped>
.hello{
position: fixed;
top: 0;
bottom: 0;
width: 100%;
height: 100%;
overflow: hidden;
}
.hello p{
text-align: left;
padding:.8rem 0 .5rem .4rem;
box-sizing: border-box;
font-size: .5rem
}
.hello button{
outline:none;
width:4rem;
height:1.2rem;
border:1px solid #F7B932;
border-radius:1rem;
margin-top: .5rem;
font-size: .45rem;
}
h1, h2 {
font-weight: normal;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
#canvas {
background: #F6F6F6;
touch-action: none;
cursor: default; }
#keyword-box {
margin: 10px 0;
}
</style>
在vue中设计一个客户签名的功能的更多相关文章
- 利用Vue实现一个简单的购物车功能
开始学习Vue的小白,dalao多多指正 想要实现下面这个界面,包含总价计算.数量增加和移除功能 话不多说代码如下 <!DOCTYPE html> <html> <hea ...
- 用Vue开发一个实时性时间转换功能,看这篇文章就够了
前言 最近有一个说法,如果你看见某个网站的某个功能,你就大概能猜出背后的业务逻辑是怎么样的,以及你能动手开发一个一毛一样的功能,那么你的前端技能算是进阶中高级水平了.比如咱们今天要聊的这个话题:如何用 ...
- 在微信框架模块中,基于Vue&Element前端的后台管理功能介绍
微信开发包括公众号.企业微信.微信小程序等方面的开发内容,需要对腾信的微信API接口进行封装:包括事件.菜单.订阅用户.多媒体文件.图文消息.消息群发.微信支付和企业红包.摇一摇设备.语义理解.微信小 ...
- iOS适配HTTPS,创建一个自签名的SSL证书(x509)具体步骤
引言(创建生成的证书只能用于测试使用.如果想使用自签名证书就只能以自己为 CA机构颁发证书,进行双向认证才能使用) 使用HTTP(超文本传输)协议访问互联网上的数据是没有经过加密的.也就是说,任何人都 ...
- 用vue开发一个app(2,main.js)
昨天跟着vue的官网搭建了vue的一个脚手架,我也是第一次用VUE一切都在摸索阶段. 今天试着看下里面脚手架里面有点什么东西 先看看main.js 导入了3个模块 一个vue,一个app,还有rout ...
- android 实现银联刷卡机消费后,手动签名的功能
几天前去物管交物业费,物管工作人员说小区引进高新产品,使用银行卡消费后,不需要拿笔在银联机上签名,直接用手指触摸实现消费签名,当时心想,果然是高科技,机子外形如下左图,签名如下右图. ...
- [转]如何创建一个自签名的SSL证书(X509)
原文出自:http://www.joyios.com/?p=47 引言 使用HTTP(超文本传输)协议访问互联网上的数据是没有经过加密的.也就是说,任何人都可以通过适当的工具拦截或者监听到在网络上传输 ...
- Vue实现一个MarkDown编辑器
Vue实现一个markdown编辑器 前段时间做项目的时候,需要一个Markdown编辑器,在网上找了一些开源的实现,但是都不满足需求 说实话,这些开源项目也很难满足需求公司项目的需求,与其实现一个大 ...
- 一步步使用SpringBoot结合Vue实现登录和用户管理功能
前后端分离开发是当今开发的主流.本篇文章从零开始,一步步使用SpringBoot结合Vue来实现日常开发中最常见的登录功能,以及登录之后对用户的管理功能.通过这个例子,可以快速入门SpringBoot ...
随机推荐
- 03SQL语句
数据库是不认识JAVA语言的,但是我们同样要与数据库交互,这时需要使用到数据库认识的语言SQL语句,它是数据库的代码. 结构化查询语言(Structured Query Language)简称SQL, ...
- HTML5 音频播放
代码实例: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- POJ 2054 Color a Tree (贪心)
$ POJ~2054~Color~a~Tree $ $ solution: $ 我们先从题中抽取信息,因为每个点的费用和染色的次数有关,所以我们可以很自然的想到先给权值大的节点染色.但是题目还说每个节 ...
- hadoop中的一些术语介绍
1.MR作业是客户端执行的一个工作单元:包括输入数据,MR的程序和配置信息. Hadoop将作业分成若干个任务task来执行,分为两种任务:map和reduce任务.这些任务运行在集群的节点上,并通过 ...
- Zabbix分布式监控系统实践 自定义配置
https://www.zabbix.com/wiki/templates/start 环境介绍OS: Ubuntu 10.10 Server 64-bitServers:zabbix-server: ...
- LeetCode--055--跳跃游戏(java)
给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 示例 1: 输入: [2,3,1,1,4] 输出: true ...
- OC + RAC (三) 信号中的信号
-(void)_test3{ RACSubject *signalofsignal = [RACSubject subject]; //信号中的信号(也就是发送的数据是信号) RACSubject * ...
- FFT IP核调用与仿真之SCALE压缩因子设置
关于FFT IP核的配置,网上有很多相关的资料可以参考,但是唯独涉及到scaled压缩因子设置这个参数,资料却非常匮乏,这是个什么参数,应该整么设置,设置后对结果输出会有什么影响,整样才能知道它设置的 ...
- 牛客多校第五场G
subsequence 1 只要处理长度等于t的. 转移方程没想出来QAQ $dp(i,j,0)$代表到$s[i]$为止有多少个前缀序列与$t[0\cdots j]$相同 所以有$dp(i,j,0)= ...
- 后端技术杂谈8:OpenStack架构设计
本文转自互联网,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutori ...