基于canvas實(shí)現(xiàn)手寫簽名(vue)
最近一直在研究canvas的東西,正好之前對手寫簽名這塊有點(diǎn)興趣。就自己基于vue寫了一個(gè)簡易的手寫簽名demo。
其中原理比較簡單,先生成一個(gè)canvas畫布,并對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里還有清除簽名和保存簽名的功能,分別對應(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è)簡易的demo,肯定會有很多未考慮到的地方。demo的下載地址
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue實(shí)現(xiàn)密碼顯示與隱藏按鈕的自定義組件功能
本文通過兩種思路給大家介紹vue實(shí)現(xiàn)密碼顯示與隱藏按鈕的自定義組件功能,感興趣的朋友跟隨小編一起看看吧2019-04-04淺談vue中resetFields()使用注意事項(xiàng)
這篇文章主要介紹了淺談vue中resetFields()使用注意事項(xiàng),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08vue-video-player 斷點(diǎn)續(xù)播的實(shí)現(xiàn)
這篇文章主要介紹了vue-video-player 斷點(diǎn)續(xù)播的實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02vue arco.design錨點(diǎn)Anchor使用方式
這篇文章主要介紹了vue arco.design錨點(diǎn)Anchor使用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04使用Vant如何實(shí)現(xiàn)數(shù)據(jù)分頁,下拉加載
這篇文章主要介紹了使用Vant實(shí)現(xiàn)數(shù)據(jù)分頁及下拉加載方式。具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06