<template>
<div ref="signaturePanel" class="signaturePanel">
<div class="title" ref="title" @click="clearAll">請?jiān)谙路絽^(qū)域簽字</div>
<canvas ref="drawingBoard" class="drawingBoard" @mousedown="mousedown" @mousemove="mousemove" @mouseup="mouseup" v-show="!mySignature"></canvas>
<img class="drawingBoard" :src="mySignature" v-show="mySignature"/>
<div class="clear" @click="clearAll"><img src="../img/clear.png"/>{{mySignature ? '重新簽名':'清除'}}</div>
<!-- <div class="nextBtn validate" @click="clearAll">提交</div> -->
<!-- <input type="file" ref="textDom"/> -->
</div>
</template>
<script>
import {uploadShareImages} from '../api/api'
export default {
props: {
signature: {
type: String,
default: ''
}
},
data () {
return {
canvas: '',
ctx: '',
painting: false,
lastPoint: {
x: undefined,
y: undefined
},
lineWidth: 2, // 畫筆寬度
color: '#000', // 畫筆顏色
mySignature: this.signature
// width: 0, // 畫布寬度
// height: 0 // 畫布高度
}
},
watch: {
signature(val) {
this.mySignature = val
}
},
mounted () {
tuhu.store.commit('shopJoin/setPageIndex', 9)
this.init()
$(document).off('click', 'a') // 恢復(fù)a標(biāo)簽的默認(rèn)事件
},
created() {
},
methods: {
onPageBack() {
// 監(jiān)聽頁面返回
tuhu.store.commit('shopJoin/setPageIndex', 9)
},
init () {
this.ctx = this.$refs.drawingBoard.getContext('2d')
this.$refs.drawingBoard.width = this.$refs.drawingBoard.offsetWidth
this.$refs.drawingBoard.height = this.$refs.drawingBoard.offsetHeight
this.ctx.strokeStyle = this.color
// 在canvas繪制前填充白色背景,不然保存的png圖片是透明的
this.ctx.fillStyle = '#fff'
this.ctx.fillRect(0, 0, this.$refs.drawingBoard.offsetWidth, this.$refs.drawingBoard.offsetHeight)
const _this = this
// 兼容移動端
if (document.body && document.body.ontouchstart !== undefined) {
_this.$refs.drawingBoard.ontouchstart = function (e) {
_this.mousedown(e, 0)
e.preventDefault()
}
_this.$refs.drawingBoard.ontouchmove = function (e) {
_this.mousemove(e, 0)
}
_this.$refs.drawingBoard.ontouchend = function (e) {
_this.mouseup(e, 0)
}
}
},
mousedown (e, flag = 1) {
this.painting = true
this.lastPoint = this.getPoint(e, flag)
},
mousemove (e, flag = 1) {
if (!this.painting) {
return
}
let newPoint = this.getPoint(e, flag)
this.drawLine(this.lastPoint.x, this.lastPoint.y, newPoint.x, newPoint.y)
this.lastPoint = newPoint
},
getPoint(e, flag = 1) {
let x
let y
try {
let clientY = flag ? e.clientY : e.touches[0].clientY
x = flag ? e.offsetX : e.touches[0].clientX
y = clientY - this.$refs.title.offsetHeight - this.$refs.signaturePanel.offsetTop + this.$refs.signaturePanel.offsetParent.scrollTop
} catch (error) {
tuhu.alert(error)
}
return {x: x, y: y}
},
mouseup () {
this.painting = false
},
drawLine (x1, y1, x2, y2) {
this.ctx.lineWidth = this.lineWidth
this.ctx.lineCap = 'round'
this.ctx.lineJoin = 'round'
this.ctx.moveTo(x1, y1)
this.ctx.lineTo(x2, y2)
this.ctx.stroke()
this.ctx.closePath()
},
clearAll () {
if (this.mySignature) {
this.mySignature = ''
this.$nextTick(() => {
this.init()
})
} else {
// this.ctx.height = this.$refs.drawingBoard.offsetHeight
this.ctx.clearRect(0, 0, this.$refs.drawingBoard.offsetWidth, this.$refs.drawingBoard.offsetHeight)
this.ctx.beginPath() // 開啟新路徑,防止連筆
// 清除以后要重新繪制背景圖
this.ctx.fillStyle = '#fff'
this.ctx.fillRect(0, 0, this.$refs.drawingBoard.offsetWidth, this.$refs.drawingBoard.offsetHeight)
}
},
convertBase64UrlToBlob(urlData) {
let bytes = window.atob(urlData.split(',')[1]) // 去掉url的頭氢伟,并轉(zhuǎn)換為byte
// 處理異常,將ascii碼小于0的轉(zhuǎn)換為大于0
let ab = new ArrayBuffer(bytes.length)
let ia = new Uint8Array(ab)
for (let i = 0; i < bytes.length; i++) {
ia[i] = bytes.charCodeAt(i)
}
return new Blob([ab], {type: 'image/png'})
},
save () { // 當(dāng)前項(xiàng)目阻止了a標(biāo)簽的默認(rèn)事件
if (this.mySignature) {
return this.mySignature
}
let imgUrl = ''
try {
imgUrl = this.$refs.drawingBoard.toDataURL('image/png')
} catch (error) {
tuhu.alert(error)
tuhu.alert('請清除簽名后浪南,重新簽名')
}
let formData = new FormData()
// console.log(this.$refs.textDom.files[0])
// formData.append('img', this.$refs.textDom.files[0])
formData.append('imageName', this.convertBase64UrlToBlob(imgUrl))
return uploadShareImages(formData)
.then((res) => {
tuhu.hidePreloader()
return res && res.filename
}).catch((e) => {
tuhu.hidePreloader()
tuhu.toast('簽名上傳失敗,請重新上傳')
return ''
})
}
}
}
</script>
<style lang="less" scoped>
.signaturePanel {
// overflow: hidden;
font-size: 14px;
background: #fff;
padding-bottom: 2.25rem;
position: relative;
&::after{
width: 100%;
content: '簽字區(qū)';
position: absolute;
top: 50% - 1rem;
left: 0;
font-size: 3rem;
text-align: center;
transform: translateY(-50%);
color: #F5F5F5;
z-index: -1;
}
.title{
height: 2rem;
padding: .6rem 0 .3rem .75rem;
color: #999;
font-weight: 400;
}
.drawingBoard {
width: 100%;
height: 12rem;
border: 1px solid #eee;
}
.clear {
height: 1.4rem;
line-height: 1.4rem;
color: #666;
background: #F5F5F5;
border-radius: .7rem;
padding: 0 .5rem;
position: absolute;
bottom: .7rem;
right: .7rem;
z-index: 99;
text-align: center;
vertical-align: top;
img{
width: .7rem;
height: .7rem;
margin-right: .1rem;
transform: translateY(.1rem)
}
}
// .save {
// background-color: #f00;
// position: absolute;
// top: 0;
// right: 0;
// z-index: 1;
// }
}
</style>
vue 簽名
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門打洼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來龄糊,“玉大人,你說我怎么就攤上這事募疮§懦停” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵阿浓,是天一觀的道長他嚷。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么筋蓖? 我笑而不...
- 正文 為了忘掉前任卸耘,我火速辦了婚禮,結(jié)果婚禮上粘咖,老公的妹妹穿的比我還像新娘蚣抗。我一直安慰自己,他們只是感情好瓮下,可當(dāng)我...
- 文/花漫 我一把揭開白布翰铡。 她就那樣靜靜地躺著,像睡著了一般唱捣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上网梢,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼手趣!你這毒婦竟也來了晌该?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬榮一對情侶失蹤绿渣,失蹤者是張志新(化名)和其女友劉穎朝群,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體中符,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡姜胖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了淀散。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片右莱。...
- 正文 年R本政府宣布胀瞪,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏凄诞。R本人自食惡果不足惜圆雁,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望帆谍。 院中可真熱鬧伪朽,春花似錦、人聲如沸汛蝙。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽窖剑。三九已至坚洽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間西土,已是汗流浹背讶舰。 一陣腳步聲響...
- 正文 我出身青樓,卻偏偏與公主長得像肋乍,于是被迫代替她去往敵國和親鹅颊。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...