微信小程序实现手指触摸画板


Posted in Javascript onJuly 09, 2018

本文实例为大家分享了微信小程序实现手指触摸画板的具体代码,供大家参考,具体内容如下

先看效果图:

微信小程序实现手指触摸画板

wxml

<!--pages/shouxieban/shouxieban.wxml-->
<view class="container">
 <view>手写板(请在下方区域手写内容)</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 = [];//动作横坐标
var arry = [];//动作纵坐标
var arrz = [];//总做状态,标识按下到抬起的一个组合
var canvasw = 0;//画布宽度
var canvash = 0;//画布高度
// pages/shouxieban/shouxieban.js
Page({
 /**
 * 页面的初始数据
 */
 data: {
 //canvas宽高
 canvasw: 0,
 canvash: 0,
 //canvas生成的图片路径
 canvasimgsrc: ""
 },
 //画布初始化执行
 startCanvas: function () {
 var that = this;
 //创建canvas
 this.initCanvas();
 //获取系统信息
 wx.getSystemInfo({
  success: function (res) {
  canvasw = res.windowWidth - 0;//设备宽度
  canvash = canvasw;
  that.setData({ 'canvasw': canvasw });
  that.setData({ 'canvash': canvash });
  }
 });
 
 },
 //初始化函数
 initCanvas: function () {
 // 使用 wx.createContext 获取绘图上下文 context
 context = wx.createCanvasContext('canvas');
 context.beginPath()
 context.setStrokeStyle('#000000');
 context.setLineWidth(4);
 context.setLineCap('round');
 context.setLineJoin('round');
 },
 //事件监听
 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);
 },
 //提交签名内容
 setSign: function () {
 var that = this;
 if (arrx.length == 0) {
  wx.showModal({
  title: '提示',
  content: '签名内容不能为空!',
  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: '微信当前版本不支持,请更新到最新版本!',
   showCancel: false
  });
  },
  complete: function () {
 
  }
 })
 
 },
 /**
 * 生命周期函数--监听页面加载
 */
 onLoad: function (options) {
 //画布初始化执行
 this.startCanvas();
 
 }
})

css

/* pages/shouxieban/shouxieban.wxss */
/*手写板 */
page{
 background: #f6f6f6;
 padding: 5px auto
}
canvas{
 border: 1px solid #d0d0d0;
 margin: 5rpx;
 background: #f2f2f2
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
正则表达式搭配js轻松处理json文本方便而老古
Feb 17 Javascript
javascript实现获取字符串hash值
May 10 Javascript
JS图片定时翻滚效果实现方法
Jun 21 Javascript
Angular2学习笔记——详解NgModule模块
Dec 02 Javascript
jQuery制作图片旋转效果
Feb 02 Javascript
详解vue 模拟后台数据(加载本地json文件)调试
Aug 25 Javascript
详解vue.js之props传递参数
Dec 12 Javascript
基于模板引擎Jade的应用(详解)
Dec 12 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
Apr 10 Javascript
django使用channels2.x实现实时通讯
Nov 28 Javascript
关于AOP在JS中的实现与应用详解
May 06 Javascript
vue随机验证码组件的封装实现
Feb 19 Javascript
微信小程序canvas实现刮刮乐效果
Jul 09 #Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
Jul 09 #Javascript
js中Object.defineProperty()方法的不详解
Jul 09 #Javascript
微信小程序实现团购或秒杀批量倒计时
Nov 01 #Javascript
微信小程序实现倒计时补零功能
Jul 09 #Javascript
Angular6中使用Swiper的方法示例
Jul 09 #Javascript
微信小程序实现自定义picker选择器弹窗内容
May 26 #Javascript
You might like
php smarty模版引擎中变量操作符及使用方法
2009/12/11 PHP
php目录遍历函数opendir用法实例
2014/11/20 PHP
PHP插件PHPMailer发送邮件功能
2017/02/28 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
2017/03/28 PHP
PHP join()函数用法与实例讲解
2019/03/11 PHP
laravel 如何实现引入自己的函数或类库
2019/10/15 PHP
javascript之锁定表格栏位
2007/06/29 Javascript
JavaScript面象对象设计
2008/04/28 Javascript
javascript iframe内的函数调用实现方法
2009/07/19 Javascript
javascript 一些用法小结
2009/09/11 Javascript
Node.js实现Excel转JSON
2015/04/24 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
2016/06/12 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
详解nodejs操作mongodb数据库封装DB类
2017/04/10 NodeJs
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
vue-property-decorator用法详解
2019/12/12 Javascript
详解使用python的logging模块在stdout输出的两种方法
2017/05/17 Python
Python编写一个闹钟功能
2017/07/11 Python
python导出hive数据表的schema实例代码
2018/01/22 Python
Python3.5 Pandas模块之Series用法实例分析
2019/04/23 Python
win10安装python3.6的常见问题
2020/07/01 Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
2020/07/02 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
Python Serial串口基本操作(收发数据)
2020/11/06 Python
cookies应对python反爬虫知识点详解
2020/11/25 Python
French Connection官网:女装、男装及家居用品
2019/03/18 全球购物
Furla官网:意大利著名的皮革品牌
2019/08/06 全球购物
社区消防工作实施方案
2014/03/21 职场文书
安全环保标语
2014/06/09 职场文书
2014年小学教学工作总结
2014/11/13 职场文书
婚姻出轨保证书
2015/05/08 职场文书
法制教育观后感
2015/06/17 职场文书
MATLAB 全景图切割及盒图显示的实现步骤
2021/05/14 Python
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python