<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签名的更多相关文章

  1. vue H5页面手机端 利用canvas 签名

    签名首先用一个canvas标签,上面加三个代码,分别是点击,移动,离开.这里点击是开始画笔的地方,如果不加@touchstart 笔头会发生偏移,可以试试. @toucheend也是如此.尾巴也会出现 ...

  2. 画布canvas签名

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  3. HTML5 中canvas支持触摸屏的签名面板

    1.前言 最近实在是太忙了,从国庆之后的辞职,在慢慢的找工作,到今天在现在的这家公司上班大半个月了,太多的心酸泪无以言表,面试过程中,见到的坑货公司是一家又一家,好几家公司自己都只是上一天班就走了,其 ...

  4. canvas画布实现手写签名效果

    最近项目中涉及到移动端手写签名的功能需求,将实现代码记录于此,供小伙伴们参考指摘哦~ HTML代码: <!--手写区--> <div class="mSign_signMa ...

  5. pc端结合canvas实现简单签名功能

    需求:业务员做提交时要签名... 代码不多简单易懂,直接看代码 <!DOCTYPE html> <html> <head> <meta charset=&qu ...

  6. canvas 实现签名效果

    效果图 概述 在线签名,现在在很多场景下都能看到,而且在移动端见的比较多. 用canvas和svg都可以实现,而且跨平台能力也很好. canvas基于像素,提供 2D 绘制函数,提供的功能更原始,适合 ...

  7. VUE中使用canvas做签名功能,兼容IE

    <template>         <div>           <div class="msgInput">             &l ...

  8. uni-app通过canvas实现手写签名

    分享一个uni-app实现手写签名的方法 具体代码如下: <template> <view > <view class="title">请在下面 ...

  9. 【微信小程序canvas】实现小程序手写板用户签名(附代码)

    工作中公司业务需要的微信小程序用户签字功能 先看效果图: wxml: <view class="wrapper"> <view class="handB ...

随机推荐

  1. Redis高级特性及应用场景

    Redis高级特性及应用场景 redis中键的生存时间(expire) redis中可以使用expire命令设置一个键的生存时间,到时间后redis会自动删除它. 过期时间可以设置为秒或者毫秒精度. ...

  2. 如何快速通过json构建javabean对象(Intellij IDEA-->GsonFormat使用教程)

    和第三方对接的时候,返回给我们的json时参数字段多是很常见的现象,所以我们手动去创建javabean肯定是要花费不少时间,博主在网上找到了很多种,可用通过json自动生成javabean的工具,这里 ...

  3. 部署k8s时容器中ping不通

    192.168.42.120 | UNREACHABLE! => {    "changed": false,     "msg": "Fail ...

  4. JAVA与c#中byte取值范围的差异

    C#中分有符号类型的sbyte和无符号类型的byte Console.WriteLine("byte.min:{0},byte.max:{1},{2}byte", byte.Min ...

  5. (转)Linux用户登录记录日志和相关查看命令汇总

    原文地址:http://www.cnblogs.com/lizhaoxian/p/5981029.html # 1 utmp.wtmp.btmp文件 Linux用户登录信息放在三个文件中: 1 /va ...

  6. Centos7 搭建Svn+Apache服务器

    Svn客户端搭建 1.yum install subversion 2.查看安装版本 svnserve --version 3.创建SVN版本库目录 mkdir -p /opt/svn 4.创建版本库 ...

  7. vscode中如何加eslint检查工具

    代码的质量对开发人员个人的成长以及公司的发展至关重要,所以如何使用把控代码的质量是大家经常思考的问题.除了代码审核之外,代码检查工具成了把控代码质量的第一道门槛,非常好用,可以建立一些团队约定的代码风 ...

  8. 从a-zA-Z0-9特殊字符中生成指定数量的随机字符密码的多层for循环跳出

    师从‘百测’besttest 今日牛老师布置了一个作业,生成一个随机密码,且要包含大写字母.小写字母.数字和特殊字符,且不能重复. 想着先生成密码,然后用各字符去检查是否存在,使用for嵌套循环. i ...

  9. MySQL知识篇-nmon监控

    说明1:监控MySQL服务器资源不止一种方式,这种nmon监控图形化.历史记录查询笔记方便,便于MySQL优化后,对比其效率不同,资源利用率不同. 说明2:摘抄自https://www.cnblogs ...

  10. linux-关闭文件

    1.打开参考: http://q.cnblogs.com/q/39275/ http://hi.baidu.com/auxor/item/49b6e929fdf16dc7ed10f197 2.关闭参考 ...