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


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 相关文章推荐
基于jquery的DIV随滚动条滚动而滚动的代码
Jul 20 Javascript
JavaScript数据类型检测代码分享
Jan 26 Javascript
JS面试题---关于算法台阶的问题
Jul 26 Javascript
JS组件系列之使用HTML标签的data属性初始化JS组件
Sep 14 Javascript
Node.js connect ECONNREFUSED错误解决办法
Sep 15 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
Dec 22 Javascript
vue-cli2.9.3 详细教程
Apr 23 Javascript
Koa2微信公众号开发之本地开发调试环境搭建
May 16 Javascript
webpack4.x打包过程详解
Jul 18 Javascript
详解js访问对象的属性和方法
Oct 25 Javascript
在node环境下parse Smarty模板的使用示例代码
Nov 15 Javascript
JavaScript写个贪吃蛇小游戏(超详细)
Mar 17 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
多文件上传的例子
2006/10/09 PHP
php strcmp使用说明
2010/04/22 PHP
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
2014/10/21 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
php往mysql中批量插入数据实例教程
2018/12/12 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
2019/10/04 PHP
jQuery实现的类flash菜单效果代码
2010/05/17 Javascript
jquery text()方法取标签中的文本
2014/07/25 Javascript
基于jQuery实现表单提交验证
2014/11/24 Javascript
js实现温度计时间样式代码分享
2015/08/21 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
浅谈Angular2 模块懒加载的方法
2017/10/04 Javascript
bootstrap轮播模板使用方法详解
2017/11/17 Javascript
关于layui flow loading占位图的实现方法
2019/09/21 Javascript
vuex存储token示例
2019/11/11 Javascript
[02:23]完美世界全国高校联赛街访DOTA2第一期
2019/11/28 DOTA
python连接池实现示例程序
2013/11/26 Python
python搭建虚拟环境的步骤详解
2016/09/27 Python
python实现停车管理系统
2018/11/30 Python
python使用thrift教程的方法示例
2019/03/21 Python
python logging通过json文件配置的步骤
2020/04/27 Python
捷克电器和DJ设备网上商店:Electronic-star
2017/07/18 全球购物
Diptyque英国官方网站:源自法国的知名香氛品牌
2019/08/28 全球购物
德国高尔夫商店:Par71.de
2020/11/29 全球购物
职业技术学校毕业生推荐信
2013/12/03 职场文书
关于廉洁的广播稿
2014/01/30 职场文书
卫生安全检查制度
2014/02/04 职场文书
单位委托书范本
2014/04/04 职场文书
淘宝好评语大全
2014/05/05 职场文书
2014年扫黄打非工作总结
2014/12/03 职场文书
股东协议书范本2016
2016/03/21 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书
导游词之清晏园
2019/11/22 职场文书
Django如何创作一个简单的最小程序
2021/05/12 Python
PHP实现rar解压读取扩展包小结
2021/06/03 PHP
俄罗斯十大城市人口排名,第三首都仅排第六,第二是北方首都
2022/03/20 杂记