canvas签名
<template>
<div class="share" style="background:#fff">
<div class="zk-title">
请工整的书写 <span style="color:#06F;">独孤求败</span> 的签字
</div>
<!-- <div style="width:100px;height:100px"><img src="" width="40px" height="40px" id="test"/>88</div> -->
<div class="canvasBox" ref="canvasHW">
<canvas @touchstart='touchStart'
@touchmove='touchMove'
@touchend='touchEnd'
@mousedown="mouseDown"
@mousemove="mouseMove"
@mouseup="mouseUp"
ref="canvasF">
</canvas>
</div>
<div class="btnBox">
<button class="clear" @click="overwrite">清除</button>
<button class="confirm" @click="commit">确认</button>
<button class="cancel" @click="cancel">取消</button>
</div>
</div>
</template>
<script>
export default {
name: 'signature',
data () {
return {
points: [],
startX: 0,
startY: 0,
moveY: 0,
moveX: 0,
endY: 0,
endX: 0,
w: null,
h: null,
imgData: '',
isDown: false,
canvasBoard: null,
canvasContext: null
}
},
mounted () {
this.canvasBoard = this.$refs.canvasF;
this.canvasBoard.height = this.$refs.canvasHW.offsetHeight;
this.canvasBoard.width = this.$refs.canvasHW.offsetWidth;
var ctx = this.canvasBoard.getContext('2d');
this.canvasContext = ctx;
ctx.lineWidth=3;
ctx.font = "Arial";
}, methods: {
back(){ },
// Computer event -- Mouse down
mouseDown (ev) {
ev = ev || event
ev.preventDefault()
console.log(ev) let obj = {
x: ev.offsetX,
y: ev.offsetY
} console.log(obj)
this.startX = obj.x
this.startY = obj.y
this.canvasContext.beginPath()
this.canvasContext.moveTo(this.startX, this.startY)
this.canvasContext.lineTo(obj.x, obj.y)
this.canvasContext.stroke()
this.canvasContext.closePath()
this.points.push(obj)
this.isDown = true
}, // Mobile event -- Touch start
touchStart (ev) {
ev = ev || event
ev.preventDefault()
if (ev.touches.length === 1) {
let obj = {
x: ev.targetTouches[0].clientX,
y: ev.targetTouches[0].clientY - 0//0为y轴的偏移量
} this.startX = obj.x
this.startY = obj.y
this.canvasContext.beginPath()
this.canvasContext.moveTo(this.startX, this.startY)
this.canvasContext.lineTo(obj.x, obj.y)
this.canvasContext.stroke()
this.canvasContext.closePath()
this.points.push(obj)
}
}, // Mobile -- Mouse move
mouseMove (ev) {
ev = ev || event
ev.preventDefault()
if (this.isDown) {
let obj = {
x: ev.offsetX,
y: ev.offsetY
} this.moveY = obj.y
this.moveX = obj.x
this.canvasContext.beginPath()
this.canvasContext.moveTo(this.startX, this.startY)
this.canvasContext.lineTo(obj.x, obj.y)
this.canvasContext.stroke()
this.canvasContext.closePath()
this.startY = obj.y
this.startX = obj.x
this.points.push(obj)
}
}, // Mobile event -- Touch move
touchMove (ev) {
ev = ev || event
ev.preventDefault()
if (ev.touches.length === 1) {
let obj = {
x: ev.targetTouches[0].clientX,
y: ev.targetTouches[0].clientY - 0
} this.moveY = obj.y
this.moveX = obj.x
this.canvasContext.beginPath()
this.canvasContext.moveTo(this.startX, this.startY)
this.canvasContext.lineTo(obj.x, obj.y)
this.canvasContext.stroke()
this.canvasContext.closePath()
this.startY = obj.y
this.startX = obj.x
this.points.push(obj)
}
}, // Computer event -- Mouse up
mouseUp (ev) {
ev = ev || event
ev.preventDefault() let obj = {
x: ev.offsetX,
y: ev.offsetY
} this.canvasContext.beginPath()
this.canvasContext.moveTo(this.startX, this.startY)
this.canvasContext.lineTo(obj.x, obj.y)
this.canvasContext.stroke()
this.canvasContext.closePath()
this.points.push(obj)
this.points.push({x: -1, y: -1})
this.isDown = false
}, // Mobile event TouchEnd
touchEnd (ev) {
ev = ev || event
ev.preventDefault()
console.log(ev)
if (ev.touches.length === 1) {
let obj = {
x: ev.targetTouches[0].clientX,
y: ev.targetTouches[0].clientY - 0
} this.canvasContext.beginPath()
this.canvasContext.moveTo(this.startX, this.startY)
this.canvasContext.lineTo(obj.x, obj.y)
this.canvasContext.stroke()
this.canvasContext.closePath()
this.points.push(obj)
this.points.push({x: -1, y: -1})
}
}, // Over write
overwrite () {
// this.canvasBoard.height
// this.canvasBoard.width
this.canvasContext.clearRect(0, 0, this.$refs.canvasF.width, this.$refs.canvasF.height);
this.points = [];
}, // Commit
commit () {
// this.$refs.mySignature.src = this.$refs.canvasF.toDataURL('image/png')
//this.$store.state.currentSignatureData = this.$refs.canvasF.toDataURL('image/png');
var imgdata = this.$refs.canvasF.toDataURL('image/png');
// var vertical = true;
// var imgdata = signaturePad.toDataURL(); // base64
//alert(Vertical);
// this.upload(imgdata, Vertical);
// 当Vertical为true的时候,后台需要转90度;
// 当Vertical为false的时候,后台不需要转;
document.getElementById('test').src=imgdata;
this.$router.back();
},
upload(imgdata, vertical) {
// $("#clearButton,#backBtn,#subBtn").hide();
//alert("v:"+vertical);
$.ajax({
type : 'POST',
dataType : 'json',
url : $("#url").val(),
data : {
media : imgdata,
v : vertical,
res_code:$("#resCode").val(),
clientId:$("#clientId").val() },
success : function(data) { if (data['error'] != null) {
alert(data['error']);
$("#clearButton,#backBtn,#subBtn").show();
$("#msg").hide();
} else { if (data.url!=null)
location.href = data.url;
else
{
$("#msg").hide();
alert("签署成功");
}
} },
error : function() {
alert("错误:" + error);
$("#clearButton,#backBtn,#subBtn").show();
$("#msg").hide();
}
});
},
cancel(){
this.$router.back();
}
}
}
</script>
<style lang="stylus" scoped>
.share
position absolute
top 0
bottom 0
left 0
right 0
z-index 15
background #fff </style> <style scoped>
.signatureBox{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
box-sizing: border-box;
overflow: hidden;
background: #fff;
z-index: 100;
display: flex;
flex-direction: column;
} .visaDetailTop p{
margin: 0;
text-align: center;
color: #000;
font-size: 1em;
position: relative;
} .visaDetailTop p span{
color: #fff;
font-size: 1.2em;
} .visaDetailTop p:first-of-type{
float: left;
} .visaDetailTop p:nth-of-type(2){
float: right;
} .canvasBox{
position: absolute;
left: 0;
top: 0;
bottom: 0;
right: 0;
box-sizing: border-box;
flex: 1;
font-family: 'Helvetica, Sans-Serif';
font-size: 16px;
} .btnBox{
height: 30px;
padding: 5px;
text-align: right;
line-height: 30px;
}
.btnBox button{
border: 1px solid lightgray;
color: #fff;
border-radius: 4px;
padding: 5px 10px;
width: 60px;
outline:none;
}
.zk-title {
position: absolute;
right: -85px;
top: 85px;
font-size: 16px;
-webkit-transform: rotate(90deg);
-ms-transform: rotate(90deg);
transform: rotate(90deg);
}
canvas {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
border-radius: 4px;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.02) inset;
} .btnBox {
position: absolute;
left: -68px;
bottom: 90px;
-webkit-transform: rotate(90deg);
-ms-transform: rotate(90deg);
transform: rotate(90deg);
}
.btnBox .clear{
background: #808080;
}
.btnBox .confirm{
background: #04BE02;
}
.btnBox .cancel{
background: #39F;
}
@media only screen and (min-width: 750px){
.signatureBox{
position: absolute;
top: 0;
left: 0;
width: 100%;
min-height: 100%;
box-sizing: border-box;
overflow: visible;
}
}
</style>
canvas签名的更多相关文章
- vue H5页面手机端 利用canvas 签名
签名首先用一个canvas标签,上面加三个代码,分别是点击,移动,离开.这里点击是开始画笔的地方,如果不加@touchstart 笔头会发生偏移,可以试试. @toucheend也是如此.尾巴也会出现 ...
- 画布canvas签名
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- HTML5 中canvas支持触摸屏的签名面板
1.前言 最近实在是太忙了,从国庆之后的辞职,在慢慢的找工作,到今天在现在的这家公司上班大半个月了,太多的心酸泪无以言表,面试过程中,见到的坑货公司是一家又一家,好几家公司自己都只是上一天班就走了,其 ...
- canvas画布实现手写签名效果
最近项目中涉及到移动端手写签名的功能需求,将实现代码记录于此,供小伙伴们参考指摘哦~ HTML代码: <!--手写区--> <div class="mSign_signMa ...
- pc端结合canvas实现简单签名功能
需求:业务员做提交时要签名... 代码不多简单易懂,直接看代码 <!DOCTYPE html> <html> <head> <meta charset=&qu ...
- canvas 实现签名效果
效果图 概述 在线签名,现在在很多场景下都能看到,而且在移动端见的比较多. 用canvas和svg都可以实现,而且跨平台能力也很好. canvas基于像素,提供 2D 绘制函数,提供的功能更原始,适合 ...
- VUE中使用canvas做签名功能,兼容IE
<template> <div> <div class="msgInput"> &l ...
- uni-app通过canvas实现手写签名
分享一个uni-app实现手写签名的方法 具体代码如下: <template> <view > <view class="title">请在下面 ...
- 【微信小程序canvas】实现小程序手写板用户签名(附代码)
工作中公司业务需要的微信小程序用户签字功能 先看效果图: wxml: <view class="wrapper"> <view class="handB ...
随机推荐
- swagger-ui 系统配置过程(基于spring+springmvc+swagger+springfox配置 web-api 管理系统)
web工程部分框架信息:spring springmvc swagger springfox maven 参考文档:https://www.cnblogs.com/exmyth/p/7183753.h ...
- SpringMVC整合SpringFox实践总结
项目中使用的swagger框架在生成api文档时存在一些问题: 1. 控制器下方法无法点击展开 2.api内容结构混乱 基于上述原因,重新整合重构了一下api文档生成的代码.在此将重整过程记录下来,方 ...
- [spring boot]idea中实现热部署的方法
发生了任何修改之后,必须关闭后再启动Application类才能够生效,显得略微麻烦. Springboot提供了热部署的方式,当发现任何类发生了改变,马上通过JVM类加载的方式,加载最新的类到虚拟机 ...
- 一百零二:CMS系统之sweetalert提示框和使用
实现效果 css body.stop-scrolling { height: 100%; overflow: hidden; } .sweet-overlay { background-color: ...
- es6 实现单链表
第一种/** * 链表节点类 */ class Node { constructor(ele) { this.ele = ele; this.next = null; } } /** * 链表类 */ ...
- Ubuntu防火墙常用命令
Ubuntu默认防火墙安装.启用.配置.端口.查看状态相关信息 最简单的一个操作: sudo ufw status(如果你是root,则去掉sudo,ufw status)可检查防火墙的状态,我的返回 ...
- JAVA 基础编程练习题4 【程序 4 分解质因数】
4 [程序 4 分解质因数] 题目:将一个正整数分解质因数.例如:输入 90,打印出 90=2*3*3*5. 程序分析:对 n 进行分解质因数,应先找到一个最小的质数 k,然后按下述步骤完成: (1) ...
- 1. hadoop使用启动命令时报错之分析解决
今天在学习hadoop启动命令的时候,先jps看了下,发现namenode.datanode都开着,所以想要先停止这些服务,结果输入命令后报错:“WARN util.NativeCodeLoader: ...
- 【Hadoop】MapReduce练习:多job关联实现倒排索引
概述 倒排索引(英语:Inverted index),也常被称为反向索引.置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射.它是文档检索系统中 ...
- k-means聚类分析范例程序
K-Means聚类算法原理参考以下链接: https://www.cnblogs.com/pinard/p/6164214.html 2. 传统K-Means算法流程 在上一节我们对K-Means的原 ...