<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. Oracle数据库导入(expdp)和导出(impdp)

    文档最后,列出了常用的一些导入导出的场景,以及一些导入导出的属性说明. 一.数据库导出(expdp) 使用sys或system账号登录oracle 通过"Window + R" 打 ...

  2. 解决Hash碰撞冲突的方法

    Hash碰撞冲突 我们知道,对象Hash的前提是实现equals()和hashCode()两个方法,那么HashCode()的作用就是保证对象返回唯一hash值,但当两个对象计算值一样时,这就发生了碰 ...

  3. python matlab 带包实现全排列

    >> A=[2,5,7];perms(A) ans = 7 5 2 7 2 5 5 7 2 5 2 7 2 7 5 2 5 7 >> perms(1:4) ans = 4 3 ...

  4. 【JVM学习笔记】字节码文件结构

    https://www.cnblogs.com/heben/p/11468285.html  比这篇笔记更好一点 新建一个Java类 package com.learn.jvm; public cla ...

  5. Linux学习—redis安装配置及远程连接

    1.下载安装包并解压 进入文件夹/usr/local cd /usr/local 下载redis安装包: wget http://download.redis.io/releases/redis-.t ...

  6. svn 创建外部链接

    背景: 之前的服务器项目<杀戮链条>,服务器工程中的common目录需要在多个子工程中共享,为了统一,所以只保留一个common目录,在子工程中采用外部链接的方法共享到工程中 1.  打开 ...

  7. LeetCode.1170-比较字符串中最小字符的出现频率(Compare Strings by Frequency of the Smallest Char)

    这是小川的第412次更新,第444篇原创 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第263题(顺位题号是1170).在一个非空字符串s上定义一个函数f(s),该函数计算s中最小字 ...

  8. Java中对JSONArray中的对象进行排序

    String jsonArrStr = "[ { \"ID\": \"135\", \"Name\": \"Fargo ...

  9. 第八周课程总结&实验报告(六)

    第八周课程总结 启动多线程售票(上课老师说要加入作业的部分) public class TestDemo { public static void main(StringD args) throws ...

  10. ABC044 Digit Sum

    题目链接 我的思路略复杂,这里介绍一个比较简洁的做法. 对于 $b \le \sqrt{N}$,暴力枚举 $b$.对于 $b > \sqrt{N}$, 注意到在 $b$ 进制下 $N$ 至多有 ...