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


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 相关文章推荐
IE innerHTML,outerHTML所引起的问题
Jun 04 Javascript
利用js获取服务器时间的两个简单方法
Jan 08 Javascript
javascript中的原型链深入理解
Feb 24 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
Sep 25 Javascript
浅谈JavaScript中的作用域和闭包问题
Jul 07 Javascript
一系列Bootstrap导航条使用方法分享
Apr 29 Javascript
JS代码实现根据时间变换页面背景效果
Jun 16 Javascript
JQuery学习总结【一】
Dec 01 Javascript
React组件内事件传参实现tab切换的示例代码
Jul 04 Javascript
微信小程序封装的HTTP请求示例【附升级版】
May 11 Javascript
微信小程序实现限制用户转发功能的实例代码
Feb 22 Javascript
Ajax 的初步实现(使用vscode+node.js+express框架)
Jun 18 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中的登陆login
2007/01/18 PHP
PHP反转字符串函数strrev()函数的用法
2012/02/04 PHP
php写入数据到CSV文件的方法
2015/03/14 PHP
php 无限分类 树形数据格式化代码
2016/10/11 PHP
关于文本框的一些限制控制总结~~
2010/04/15 Javascript
基于jQuery UI CSS Framework开发Widget的经验
2010/08/21 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
2014/09/03 Javascript
JavaScript中return false的用法
2015/03/12 Javascript
javascript学习笔记整理(概述、变量、数据类型简介)
2015/10/25 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
让DIV的滚动条自动滚动到最底部的3种方法(推荐)
2016/09/24 Javascript
jQuery拖拽通过八个点改变div大小
2020/11/29 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
浅谈JS如何实现真正的对象常量
2017/06/25 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
2017/07/28 Javascript
JavaScript判断输入是否为数字类型的方法总结
2017/09/28 Javascript
vue.js给动态绑定的radio列表做批量编辑的方法
2018/02/28 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
vuejs前后端数据交互之从后端请求数据的实例
2018/08/11 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
全面了解JavaScript的作用域链
2019/04/03 Javascript
在NodeJs中使用node-schedule增加定时器任务的方法
2020/06/08 NodeJs
vue中解决微信html5原生ios虚拟键返回不刷新问题
2020/10/20 Javascript
Python脚本实现集群检测和管理功能
2015/03/06 Python
python通过函数属性实现全局变量的方法
2015/05/16 Python
Python面向对象编程基础解析(一)
2017/10/26 Python
python实现决策树分类算法
2017/12/21 Python
PyCharm代码整体缩进,反向缩进的方法
2018/06/25 Python
对python添加模块路径的三种方法总结
2018/10/16 Python
python3实现的zip格式压缩文件夹操作示例
2019/08/17 Python
Clos19英国:高档香槟、葡萄酒和烈酒在线购物平台
2020/07/10 全球购物
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
行政管理专业推荐信
2013/11/02 职场文书
党员违纪检讨书怎么写
2014/11/01 职场文书
浅谈Python中的函数(def)及参数传递操作
2021/05/25 Python
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL