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


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应用之禁止抓屏、复制、打印
Feb 21 Javascript
jQuery ajax 路由和过滤器使用说明
Aug 02 Javascript
jquery 获取自定义属性(attr和prop)的实现代码
Jun 27 Javascript
jQuery的attr与prop使用介绍
Oct 10 Javascript
javascript(js)的小数点乘法除法问题详解
Mar 07 Javascript
js+css实现tab菜单切换效果的方法
Jan 20 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
Mar 04 Javascript
Javascript iframe交互并兼容各种浏览器的解决方法
Jul 12 Javascript
浅谈关于iview表单验证的问题
Sep 29 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
May 18 Javascript
微信小程序用户拒绝授权的处理方法详解
Sep 20 Javascript
浅谈vue.watch的触发条件是什么
Nov 07 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
星际争霸任务指南——人族
2020/03/04 星际争霸
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
2014/06/19 PHP
PHP中文编码小技巧
2014/12/25 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
2017/06/06 PHP
繁简字转换功能
2006/07/19 Javascript
脚本吧 - 幻宇工作室用到js,超强推荐base.js
2006/12/23 Javascript
B/S开发中常用javaScript技术与代码
2007/03/09 Javascript
JavaScript QueryString解析类代码
2010/01/17 Javascript
js Form.elements[i]的使用实例
2011/11/13 Javascript
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
7个有用的jQuery代码片段分享
2015/05/19 Javascript
JavaScript html5 canvas绘制时钟效果(二)
2016/03/27 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
深入理解vue-loader如何使用
2017/06/06 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
Electron-vue开发的客户端支付收款工具的实现
2019/05/24 Javascript
jQuery 选择方法及$(this)用法实例分析
2020/05/19 jQuery
JS中箭头函数与this的写法和理解
2021/01/14 Javascript
python3爬取淘宝信息代码分析
2018/02/10 Python
深入了解Python iter() 方法的用法
2019/07/11 Python
使用pip安装python库的多种方式
2019/07/31 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
2020/03/24 Python
基于Django OneToOneField和ForeignKey的区别详解
2020/03/30 Python
获取CSDN文章内容并转换为markdown文本的python
2020/09/06 Python
PyTorch中的拷贝与就地操作详解
2020/12/09 Python
英国拖鞋购买网站:Bedroom Athletics
2020/02/28 全球购物
集中采购方案
2014/06/10 职场文书
2014县委书记党的群众路线教育实践活动对照检查材料思想汇报
2014/09/22 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
MySQL sql_mode的使用详解
2021/05/08 MySQL
详细聊聊Oracle表碎片对性能有多大的影响
2022/03/19 Oracle