微信小程序canvas寫(xiě)字板效果及實(shí)例
微信小程序canvas寫(xiě)字板效果及實(shí)例
寫(xiě)字板效果:書(shū)寫(xiě)文字,畫(huà)板重置,導(dǎo)出圖片,導(dǎo)出圖片前判斷是否書(shū)寫(xiě)內(nèi)容


app.json:
添加一個(gè)路由:"pages/canvas/canvas"
{
"pages":[
"pages/index/index",
"pages/logs/logs",
"pages/canvas/canvas"
],
"window":{
"navigationBarBackgroundColor": "#ea6a46",
"navigationBarTextStyle":"white",
"navigationBarTitleText": "寫(xiě)字板",
"backgroundTextStyle":"dark",
"backgroundColor":"white",
"enablePullDownRefresh":"true"
}
}
然后就是:
canvas.wxml:
<!--pages/canvas/canvas.wxml--> <canvas class="canvas" id="canvas" canvas-id="canvas" disable-scroll="true" bindtouchstart="canvasStart" bindtouchmove="canvasMove" bindtouchend="canvasEnd" touchcancel="canvasEnd" binderror="canvasIdErrorCallback"></canvas> <button type="default" bindtap="cleardraw">清除畫(huà)布</button> <button type="default" bindtap="getimg">導(dǎo)出圖片</button>
canvas.js:
// canvas 全局配置
var context = null;// 使用 wx.createContext 獲取繪圖上下文 context
var isButtonDown = false;
var arrx = [];
var arry = [];
var arrz = [];
var canvasw = 0;
var canvash = 0;
//獲取系統(tǒng)信息
wx.getSystemInfo({
success: function (res) {
canvasw = res.windowWidth;//設(shè)備寬度
canvash = res.windowWidth*7/15;
}
});
//注冊(cè)頁(yè)面
Page({
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);
//context.moveTo(event.changedTouches[0].x, event.changedTouches[0].y);
},
canvasMove: function (event) {
if (isButtonDown) {
arrz.push(1);
arrx.push(event.changedTouches[0].x);
arry.push(event.changedTouches[0].y);
// context.lineTo(event.changedTouches[0].x, event.changedTouches[0].y);
// context.stroke();
// context.draw()
};
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.stroke();
context.draw(true);
},
canvasEnd: function (event) {
isButtonDown = false;
},
cleardraw: function () {
//清除畫(huà)布
arrx = [];
arry = [];
arrz = [];
context.clearRect(0, 0, canvasw, canvash);
context.draw(true);
},
getimg: function(){
if (arrx.length==0){
wx.showModal({
title: '提示',
content: '簽名內(nèi)容不能為空!',
showCancel: false
});
return false;
};
//生成圖片
wx.canvasToTempFilePath({
canvasId: 'canvas',
success: function (res) {
console.log(res.tempFilePath);
//存入服務(wù)器
wx.uploadFile({
url: 'a.php', //接口地址
filePath: res.tempFilePath,
name: 'file',
formData: { //HTTP 請(qǐng)求中其他額外的 form data
'user': 'test'
},
success: function (res) {
console.log(res);
},
fail: function (res) {
console.log(res);
},
complete: function (res) {
}
});
}
})
},
/**
* 頁(yè)面的初始數(shù)據(jù)
*/
data: {
src: ""
},
/**
* 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面加載
*/
onLoad: function (options) {
// 使用 wx.createContext 獲取繪圖上下文 context
context = wx.createCanvasContext('canvas');
context.beginPath()
context.setStrokeStyle('#000000');
context.setLineWidth(4);
context.setLineCap('round');
context.setLineJoin('round');
}
})
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
微信小程序 動(dòng)態(tài)綁定事件并實(shí)現(xiàn)事件修改樣式
這篇文章主要介紹了微信小程序 動(dòng)態(tài)綁定事件并實(shí)現(xiàn)事件修改樣式的相關(guān)資料,需要的朋友可以參考下2017-04-04
微信小程序 (七)數(shù)據(jù)綁定詳細(xì)介紹
這篇文章主要介紹了微信小程序數(shù)據(jù)綁定詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-09-09
Typescript?封裝?Axios攔截器方法實(shí)例
這篇文章主要為大家介紹了Typescript?封裝?Axios攔截器方法實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
詳解HTML5 使用video標(biāo)簽實(shí)現(xiàn)選擇攝像頭功能
這篇文章主要介紹了詳解HTML5 使用video標(biāo)簽實(shí)現(xiàn)選擇攝像頭功能的相關(guān)資料,希望通過(guò)本文能幫助到大家,實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-10-10
微信小程序 開(kāi)發(fā)之頂部導(dǎo)航欄實(shí)例代碼
這篇文章主要介紹了微信小程序 開(kāi)發(fā)之頂部導(dǎo)航欄實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02
JS前端常見(jiàn)的競(jìng)態(tài)問(wèn)題解決方法詳解
這篇文章主要為大家介紹了JS前端常見(jiàn)的競(jìng)態(tài)問(wèn)題解決方法詳解,閱讀完本文,你將會(huì)知道:什么是競(jìng)態(tài)問(wèn)題;通常出現(xiàn)在哪些場(chǎng)景;解決競(jìng)態(tài)問(wèn)題有哪些方法,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪的相關(guān)資料2022-08-08

