微信小程序?qū)崿F(xiàn)手指觸摸畫板
本文實(shí)例為大家分享了微信小程序?qū)崿F(xiàn)手指觸摸畫板的具體代碼,供大家參考,具體內(nèi)容如下
先看效果圖:

wxml
<!--pages/shouxieban/shouxieban.wxml-->
<view class="container">
<view>手寫板(請(qǐng)?jiān)谙路絽^(qū)域手寫內(nèi)容)</view>
<canvas style="width: {{canvasw}}px; height: {{canvash}}px" class="canvas" id="canvas" canvas-id="canvas" disable-scroll="true" bindtouchstart="canvasStart" bindtouchmove="canvasMove" bindtouchend="canvasEnd" touchcancel="canvasEnd" binderror="canvasIdErrorCallback"></canvas>
<view class='btns canvaspd'>
<button bindtap="cleardraw">清除畫板</button>
<button bindtap="setSign">確定</button>
</view>
<image src='{{canvasimgsrc}}'></image>
</view>
js
var context = null;// 使用 wx.createContext 獲取繪圖上下文 context
var isButtonDown = false;//是否在繪制中
var arrx = [];//動(dòng)作橫坐標(biāo)
var arry = [];//動(dòng)作縱坐標(biāo)
var arrz = [];//總做狀態(tài),標(biāo)識(shí)按下到抬起的一個(gè)組合
var canvasw = 0;//畫布寬度
var canvash = 0;//畫布高度
// pages/shouxieban/shouxieban.js
Page({
/**
* 頁(yè)面的初始數(shù)據(jù)
*/
data: {
//canvas寬高
canvasw: 0,
canvash: 0,
//canvas生成的圖片路徑
canvasimgsrc: ""
},
//畫布初始化執(zhí)行
startCanvas: function () {
var that = this;
//創(chuàng)建canvas
this.initCanvas();
//獲取系統(tǒng)信息
wx.getSystemInfo({
success: function (res) {
canvasw = res.windowWidth - 0;//設(shè)備寬度
canvash = canvasw;
that.setData({ 'canvasw': canvasw });
that.setData({ 'canvash': canvash });
}
});
},
//初始化函數(shù)
initCanvas: function () {
// 使用 wx.createContext 獲取繪圖上下文 context
context = wx.createCanvasContext('canvas');
context.beginPath()
context.setStrokeStyle('#000000');
context.setLineWidth(4);
context.setLineCap('round');
context.setLineJoin('round');
},
//事件監(jiān)聽
canvasIdErrorCallback: function (e) {
console.error(e.detail.errMsg)
},
canvasStart: function (event) {
isButtonDown = true;
arrz.push(0);
arrx.push(event.changedTouches[0].x);
arry.push(event.changedTouches[0].y);
},
canvasMove: function (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);
context.setStrokeStyle('#000000');
context.setLineWidth(4);
context.setLineCap('round');
context.setLineJoin('round');
context.stroke();
context.draw(false);
},
canvasEnd: function (event) {
isButtonDown = false;
},
//清除畫布
cleardraw: function () {
//清除畫布
arrx = [];
arry = [];
arrz = [];
context.clearRect(0, 0, canvasw, canvash);
context.draw(true);
},
//提交簽名內(nèi)容
setSign: function () {
var that = this;
if (arrx.length == 0) {
wx.showModal({
title: '提示',
content: '簽名內(nèi)容不能為空!',
showCancel: false
});
return false;
};
console.log("不是空的,canvas即將生成圖片")
//生成圖片
wx.canvasToTempFilePath({
canvasId: 'canvas',
success: function (res) {
console.log("canvas可以生成圖片")
console.log(res.tempFilePath, 'canvas圖片地址');
that.setData({ canvasimgsrc: res.tempFilePath })
//code 比如上傳操作
},
fail: function () {
console.log("canvas不可以生成圖片")
wx.showModal({
title: '提示',
content: '微信當(dāng)前版本不支持,請(qǐng)更新到最新版本!',
showCancel: false
});
},
complete: function () {
}
})
},
/**
* 生命周期函數(shù)--監(jiān)聽頁(yè)面加載
*/
onLoad: function (options) {
//畫布初始化執(zhí)行
this.startCanvas();
}
})
css
/* pages/shouxieban/shouxieban.wxss */
/*手寫板 */
page{
background: #f6f6f6;
padding: 5px auto
}
canvas{
border: 1px solid #d0d0d0;
margin: 5rpx;
background: #f2f2f2
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
深入理解Javascript中的valueOf與toString
javascript中所有數(shù)據(jù)類型都擁有valueOf和toString這兩個(gè)方法,null除外。它們倆解決javascript值運(yùn)算與顯示的問題,本文將詳細(xì)介紹,有需要的朋友可以參考下2017-01-01
JavaScript簡(jiǎn)單計(jì)算人的年齡示例
這篇文章主要介紹了JavaScript簡(jiǎn)單計(jì)算人的年齡,涉及簡(jiǎn)單的javascript字符串轉(zhuǎn)換及日期運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-04-04
JavaScript中5個(gè)重要的Observer函數(shù)小結(jié)
瀏覽器為開發(fā)者提供了功能豐富的Observer,本文主要介紹了JavaScript中5個(gè)重要的Observer函數(shù)小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
利用JS實(shí)現(xiàn)機(jī)器人總動(dòng)員小游戲
這篇文章主要介紹了如何利用HTML+CSS+JS編寫一個(gè)機(jī)器人總動(dòng)員小游戲,代碼簡(jiǎn)單易懂對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11
JavaScript轉(zhuǎn)換農(nóng)歷類實(shí)現(xiàn)及調(diào)用方法
農(nóng)歷是日常生活中不可或缺的一部分,它與人類的生活息息相關(guān),從某種程度上說(shuō),它一直伴隨著我們,今天的任務(wù)是JavaScript轉(zhuǎn)換農(nóng)歷類的實(shí)現(xiàn),感興趣的你可以千萬(wàn)不要錯(cuò)過,希望本文對(duì)你有所幫助2013-01-01
Cropper.js進(jìn)階之裁剪后保存至服務(wù)器實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了Cropper.js進(jìn)階之裁剪后保存至服務(wù)器實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05

