手签

news/2024/11/7 6:45:39/

手签

<template><a-modalv-model="showModel":closable="false":maskClosable="false"title="在以下区域内签名"@cancel="onClosePopup"@ok="save"><div><div><canvas class="canvas" id="m-signature-canvas"></canvas></div><div><div class="center"><a-button type="primary" size="small" @click="clear">清除</a-button></div></div></div></a-modal>
</template><script>
/*** 手签组件*/
export default {name: 'Signature',components: {},props: {showPopup: {type: Boolean,default: false,required: true}},data () {return {showModel: false,signaturePad: null,canvas: null}},watch: {showPopup (value, oldValue) {if (value !== oldValue) {this.showModel = valueif (this.showModel && !this.canvas) {this.$nextTick(() => {this.initCanvas()})}}}},created () {this.init()},mounted () {this.initCanvas()},methods: {init () {this.showModel = this.showPopup},initCanvas () {function resizeCanvas () {var ratio = Math.max(window.devicePixelRatio || 1, 1)canvas.width = canvas.offsetWidth * ratiocanvas.height = canvas.offsetHeight * ratiocanvas.getContext('2d').scale(ratio, ratio)}var canvas = document.getElementById('m-signature-canvas')if (canvas) {window.onresize = resizeCanvasresizeCanvas()this.canvas = canvas// eslint-disable-next-line no-undefthis.signaturePad = new SignaturePad(canvas)this.clear()}},clear () {if (this.signaturePad) {this.signaturePad.clear()}},onClosePopup () {this.$emit('onClosePopup')},save () {if (this.signaturePad) {var signaturePad = this.signaturePad// eslint-disable-next-line no-unused-varsvar canvas = this.canvasif (signaturePad.isEmpty()) {this.$toast('请提供签名')} else {var ctx = canvas.getContext('2d')var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height).datavar lOffset = canvas.width; var rOffset = 0; var tOffset = canvas.height; var bOffset = 0for (var i = 0; i < canvas.width; i++) {for (var j = 0; j < canvas.height; j++) {var pos = (i + canvas.width * j) * 4if (imgData[pos] > 0 || imgData[pos + 1] > 0 || imgData[pos + 2] || imgData[pos + 3] > 0) {bOffset = Math.max(j, bOffset) // 找到有色彩的最底部的纵坐标rOffset = Math.max(i, rOffset) // 找到有色彩的最右端tOffset = Math.min(j, tOffset) // 找到有色彩的最上端lOffset = Math.min(i, lOffset) // 找到有色彩的最左端}}}// 由于循环是从0开始的,而我们认为的行列是从1开始的lOffset++rOffset++tOffset++bOffset++// console.log(lOffset, rOffset, tOffset, bOffset)var oldUrl = signaturePad.toDataURL()var originImage = new Image()originImage.src = oldUrlvar canvas2 = document.createElement('canvas')canvas2.width = rOffset - lOffsetcanvas2.height = bOffset - tOffset// document.body.appendChild(canvas)// 用9参数的drawImage方法对图片进行裁减canvas2.getContext('2d').drawImage(originImage, lOffset, tOffset, rOffset - lOffset, bOffset - tOffset, 0, 0, rOffset - lOffset, bOffset - tOffset)// var newUrl = canvas2.toDataURL();// var newImage = new Image();// newImage.src = newUrl;// window.open(canvas2.toDataURL())canvas2.remove()var result = signaturePad.toDataURL()this.$emit('onPopupConfirm', result)}}}}
}
</script>
<style lang="less" scoped>
.canvas {width:100%;height:80%;background: #666666;
}
.center {text-align: center;
}
</style>

http://www.ppmy.cn/news/180480.html

相关文章

6种手势

1.手势UIGestureRecognizer UIGestureRecognizer是一个抽象类我们不能直接使用&#xff0c;他有6个子类&#xff08;tap,pan,swip,long,scale,raition)。他的父类NSObject。 2.常用属性和函数 //函数 创建-(instancetype)initWithTarget:target action(SEL)action单独添加ta…

什么是三次握手、什么是四次握手

在上一篇我们了解的TCP的报文格式和TCP连接管理机制&#xff1a;TCP初认识 今天来理解什么是三次握手&#xff0c;什么是四次挥手 图1 TCP连接管理 什么是三次握手 在网络数据传输中&#xff0c;传输层协议TCP(传输控制协议)是建立连接的可靠传输&#xff0c;TCP建立连接的过程…

什么是三次握手?

文章目录 三次握手三次握手的目的&#xff1a;名词解释&#xff1a;具体流程&#xff1a; 三次握手 三次握手的目的&#xff1a; 当两台主机要通信时&#xff0c;确认两台主机都具备发送和接收的能力。 名词解释&#xff1a; SYN 1 表示请求建立连接 SYN 0 …

孩子快抓住妈妈的手

孩子快抓住妈妈的手 说明&#xff1a;来自网络 孩子 快抓紧妈妈的手 去天堂的路 太黑了 妈妈怕你 碰了头 快 抓紧妈妈的手 让妈妈陪你走 妈妈 怕 天堂的路 太黑 我看不见你的手 自从 倒塌的墙 把阳光夺走 我再也看不见 你柔情的眸 孩子 你走吧 前面的路 …

都握手了,怎么能少得了挥手嘞

四次挥手只有一个目的&#xff1a;让双方都知道对方想要断开连接并且把该传输的数据都传输完 假设是由有客户端发起的断开请求&#xff1a; 第一次挥手&#xff1a;客户端给服务器端发送一个FIN标志位和seq&#xff0c;就像是在告诉服务器&#xff0c;"我想跟你断开连接&a…

练手~~~

文本操作 逆转字符串——输入一个字符串&#xff0c;将其逆转并输出。 拉丁猪文字游戏——这是一个英语语言游戏。基本规则是将一个英语单词的第一个辅音音素的字母移动到词尾并且加上后缀-ay&#xff08;譬如“banana”会变成“anana-bay”&#xff09;。可以在维基百科上了解…

三次握手~

在TCB传输中为了保证文件传输的可靠性&#xff08;可靠性不等于安全性&#xff0c;可靠性是指A发送的信息&#xff0c;A知道B是否收到&#xff0c;安全性是指传输的数据会不会被发生截取和篡改&#xff09;做了一系列操作&#xff0c;其中包括了确认应答&#xff08;核心&#…

三握四挥

一、VUE和Dj ango工作流程&#xff1a; 二、Django中间件的作用&#xff1a; 三、Django中间件请求顺序&#xff1a; 四、总结的(终极版)&#xff1a; 五、三次握手&#xff0c;四次挥手&#xff1a; 六、HTTP的三次握手&#xff0c;四次挥手总结&#xff1a; 舔狗的过程 七、H…