基于canvas實(shí)現(xiàn)手寫簽名(vue)
最近一直在研究canvas的東西,正好之前對(duì)手寫簽名這塊有點(diǎn)興趣。就自己基于vue寫了一個(gè)簡(jiǎn)易的手寫簽名demo。
其中原理比較簡(jiǎn)單,先生成一個(gè)canvas畫布,并對(duì)canvas進(jìn)行touchstart和touchmove事件進(jìn)行監(jiān)聽。當(dāng)監(jiān)聽touchstart事件被觸發(fā)時(shí),我們開始觸發(fā)canvas里的beginPath事件并且設(shè)置moveTo原始點(diǎn)。當(dāng)監(jiān)聽touchmove事件則去不斷去觸發(fā)lineTo事件,最后stroke()。
demo里還有清除簽名和保存簽名的功能,分別對(duì)應(yīng)了clearRect()和toDataURL()方法。
具體的demo代碼如下:
<template>
<div>
<canvas id="canvas" width="300" height="150">
</canvas>
<div class="btn">
<span @click="toClear()">清除</span>
<span @click="toSave()">保存</span>
</div>
</div>
</template>
<script>
export default {
name: "sign-name",
data(){
return {
ctx:null,
canvas:null
}
},
mounted() {
this.initPage()
},
methods:{
initPage() {
this.canvas = document.getElementById('canvas')
if(this.canvas.getContext){
this.ctx = this.canvas.getContext('2d')
let background = "#ffffff"
this.ctx.lineCap = 'round'
this.ctx.fillStyle = background
this.ctx.lineWidth = 2
this.ctx.fillRect(0,0,350,150)
this.canvas.addEventListener("touchstart",(e)=>{
console.log(123,e)
this.ctx.beginPath()
this.ctx.moveTo(e.changedTouches[0].pageX,e.changedTouches[0].pageY)
})
this.canvas.addEventListener("touchmove",(e)=>{
this.ctx.lineTo(e.changedTouches[0].pageX,e.changedTouches[0].pageY)
this.ctx.stroke()
})
}
},
toClear() {
this.ctx.clearRect(0,0,300,150)
},
toSave() {
let base64Img = this.canvas.toDataURL()
console.log(123,base64Img)
}
}
}
</script>
<style lang="scss" scoped>
.btn {
height: px2Vw(55);
position: fixed;
bottom: 0;
line-height: px2Vw(55);
border-top: px2Vw(1) solid #f7f8f9;
span {
display: inline-block;
width: px2Vw(185);
text-align: center;
}
}
canvas {
position: fixed;
border: 2px dashed #cccccc;
float: right;
}
</style>
代碼運(yùn)行后的效果圖如下:


這只是個(gè)簡(jiǎn)易的demo,肯定會(huì)有很多未考慮到的地方。demo的下載地址
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
fetch網(wǎng)絡(luò)請(qǐng)求封裝示例詳解
這篇文章主要介紹了fetch網(wǎng)絡(luò)請(qǐng)求封裝的示例內(nèi)容詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11
vue項(xiàng)目啟動(dòng)如何設(shè)置默認(rèn)啟動(dòng)頁
這篇文章主要介紹了vue項(xiàng)目啟動(dòng)如何設(shè)置默認(rèn)啟動(dòng)頁問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
vue+element+electron仿微信實(shí)現(xiàn)代碼
這篇文章主要介紹了vue+element+electron仿微信實(shí)現(xiàn),本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12
Vue3+Canvas實(shí)現(xiàn)坦克大戰(zhàn)游戲(一)
這篇文章將利用Vue3和Canvas編寫一個(gè)童年經(jīng)典游戲—坦克大戰(zhàn),文中的示例代碼講解詳細(xì),感興趣的小伙伴快來跟隨小編一起學(xué)習(xí)一下吧2022-03-03

