微信小程序?qū)崿F(xiàn)電子簽名
更新時間:2021年06月16日 11:08:55 作者:拈花醉。
這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)電子簽名,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了微信小程序?qū)崿F(xiàn)電子簽名的具體代碼,供大家參考,具體內(nèi)容如下
<view class="sign-contain"> <view class="signName"> <canvas id="canvas" canvas-id="canvas" class="{{ sysType === 'iOS' ? 'canvas' : 'canvas bg000'}}" disable-scroll="true" bindtouchstart="canvasStart" bindtouchmove="canvasMove" bindtouchend="canvasEnd" touchcancel="canvasEnd" binderror="canvasIdErrorCallback"></canvas> </view> <view class="btn-wrap"> <button catchtap="cleardraw">清除簽名</button> <button catchtap="uploadImg">上傳簽名</button> </view> </view>
js:
var context = null;// 使用 wx.createContext 獲取繪圖上下文 context var isButtonDown = false;//是否在繪制中 var arrx = [];//動作橫坐標 var arry = [];//動作縱坐標 var arrz = [];//總做狀態(tài),標識按下到抬起的一個組合 var canvasw = 0;//畫布寬度 var canvash = 0;//畫布高度 Page({ data: { canvasw: '', canvash: '', imgUrl: '', info: {}, signBase64: '', sysType: '' // 判斷機型 }, onLoad: function (options) { let that = this let res = wx.getSystemInfoSync() const system = res.system.split(' ') that.setData({ sysType: system[0], }) let params = JSON.parse(options.params) that.setData({ info: params, }) that.startCanvas(); that.initCanvas() }, /** * 以下 - 手寫簽名 / 上傳簽名 */ startCanvas() {//畫布初始化執(zhí)行 var that = this; //獲取系統(tǒng)信息 wx.getSystemInfo({ success: function (res) { canvasw = res.windowWidth; canvash = res.windowHeight; that.setData({ canvasw: canvasw }); that.setData({ canvash: canvash }); } }); this.initCanvas(); this.cleardraw(); }, //初始化函數(shù) initCanvas() { context = wx.createCanvasContext('canvas'); context.beginPath() if(this.data.sysType === 'iOS') { context.fillStyle = 'rgba(255, 255, 255, 1)'; context.setStrokeStyle('#444'); } else { context.fillStyle = 'rgba(0, 0, 0, 1)'; context.setStrokeStyle('#aaa'); } context.setLineWidth(4); context.setLineCap('round'); context.setLineJoin('round'); }, canvasStart(event) { isButtonDown = true; arrz.push(0); arrx.push(event.changedTouches[0].x); arry.push(event.changedTouches[0].y); }, canvasMove(event) { if (isButtonDown) { arrz.push(1); arrx.push(event.changedTouches[0].x); arry.push(event.changedTouches[0].y); } for (var i = 0; i < arrx.length; i++) { if (arrz[i] == 0) { context.moveTo(arrx[i], arry[i]) } else { context.lineTo(arrx[i], arry[i]) } } context.clearRect(0, 0, canvasw, canvash); if(this.data.sysType === 'iOS') { context.fillStyle = 'rgba(255, 255, 255, 1)'; context.setStrokeStyle('#444'); } else { context.fillStyle = 'rgba(0, 0, 0, 1)'; context.setStrokeStyle('#aaa'); } context.setLineWidth(3); context.setLineCap('round'); context.setLineJoin('round'); context.stroke(); context.draw(false); }, canvasEnd(event) { isButtonDown = false; }, //清除畫布 cleardraw() { arrx = []; arry = []; arrz = []; context.clearRect(0, 0, canvasw, canvash); if(this.data.sysType === 'iOS') { context.fillStyle = 'rgba(255, 255, 255, 1)'; context.setStrokeStyle('#444'); } else { context.fillStyle = 'rgba(0, 0, 0, 1)'; context.setStrokeStyle('#aaa'); } context.draw(true); }, uploadImg() { var that = this //生成圖片 // context.draw(true,()=> { setTimeout(() => { wx.canvasToTempFilePath({ canvasId: 'canvas', //設(shè)置輸出圖片的寬高 fileType: 'jpg', quality: 1, success: function (res) { // canvas圖片地址 res.tempFilePath let imgBase64 = wx.getFileSystemManager().readFileSync(res.tempFilePath, 'base64') that.setData({ imgUrl: res.tempFilePath, signBase64: imgBase64 }) that.submitSign() console.log('imgBase64', 'data:image/jpeg;base64,' + imgBase64) // wx.saveImageToPhotosAlbum({ // filePath: res.tempFilePath, // success(res4) { // console.log(res,'保存res4'); // wx.showToast( { // title: '已成功保存到相冊', // duration: 2000 // } ); // } // }) }, fail: function () { wx.showModal({ title: '提示', content: 'canvas生成圖片失敗。微信當前版本不支持,請更新到最新版本!', showCancel: false }); }, complete: function () { } }, 5000) }) // }) }, // 提交簽名 submitSign() { let that = this wx.showLoading({ title: '正在提交...', mask: true }) let type = '1' if(that.data.sysType === 'iOS') { type = '0' } else { type = '1' } wx.$getWxLoginCode(resp => { const params = { qmbase64: that.data.signBase64, } console.info("入?yún)?, params) wx.kservice.yyyurl(params, res => { wx.hideLoading() if (res.statusCode === '200') { wx.showModal({ title: '提示', content: res.message, showCancel: false, confirmText: '返回首頁', success(res) { if (res.confirm) { wx.reLaunch({ url: '/pages/index/index' }) } } }) } else { wx.showModal({ title: '提示', content: res.message, showCancel: true, cancelText: '返回首頁', confirmText: '重新提交', success: (result) => { if (result.cancel) { // 取消停留 wx.reLaunch({ url: '/pages/index/index' }) } else if (result.confirm) { //重新提交 that.submitSign() } }, }); } }, {}, true, true) }) }, /** * 生命周期函數(shù)--監(jiān)聽頁面卸載 */ onUnload: function () { }, /** * 頁面相關(guān)事件處理函數(shù)--監(jiān)聽用戶下拉動作 */ onPullDownRefresh: function () { }, /** * 頁面上拉觸底事件的處理函數(shù) */ onReachBottom: function () { }, /** * 用戶點擊右上角分享 */ onShareAppMessage: function () { } })
CSS:
.sign-contain { display: flex; flex-direction:column; width: 100%; height: 100%; } .signName { flex: 1; } .canvas { width: 100%; height: 100%; } .bg000{ background-color: #000; } .btn-wrap{ display: block; width:100%; height: 100rpx; margin: 20rpx 0; position: relative; } .btn-wrap button{ width: 43%; }
為大家推薦現(xiàn)在關(guān)注度比較高的微信小程序教程一篇:《微信小程序開發(fā)教程》小編為大家精心整理的,希望喜歡。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
uniapp介紹與使用以及小程序?qū)崟r獲取視頻播放時間
這篇文章主要給大家介紹了關(guān)于uniapp介紹與使用以及小程序?qū)崟r獲取視頻播放時間的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家學習或者使用uniapp具有一定的參考學習價值,需要的朋友可以參考下2023-02-02兩種不同的方法實現(xiàn)js對checkbox進行全選和反選
這篇文章主要介紹了通過兩種不同的方法實現(xiàn)js對checkbox進行全選和反選,需要的朋友可以參考下2014-05-05JavaScript是否可實現(xiàn)多線程 深入理解JavaScript定時機制
JavaScript的setTimeout與setInterval是兩個很容易欺騙別人感情的方法,因為我們開始常常以為調(diào)用了就會按既定的方式執(zhí)行, 我想不少人都深有同感,2009-12-12javascript for循環(huán)從入門到偏門(效率優(yōu)化+奇特用法)
for循環(huán)是非常基礎(chǔ)的javascript知識,但由于JS太靈活了,所以可能出現(xiàn)一些讓初學者崩潰的寫法。我決定由淺入深的解釋一下for循環(huán),算是給比我還新手的新手解惑吧,少走彎路2012-08-08