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


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官方 jQuery1.1.3发布,速度提升800%,体积保持20K
Aug 19 Javascript
自制轻量级仿jQuery.boxy对话框插件代码
Oct 26 Javascript
JavaScript的Module模式编程深入分析
Aug 13 Javascript
Jquery解析json数据详解
Dec 26 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
Jan 22 Javascript
用console.table()调试javascript
Sep 04 Javascript
Js控制滑轮左右滑动实例
Feb 13 Javascript
详解vue-router2.0动态路由获取参数
Jun 14 Javascript
基于bootstrap页面渲染的问题解决方法
Aug 09 Javascript
ios设备中angularjs无法改变页面title的解决方法
Sep 13 Javascript
webpack之引入图片的实现及问题
Oct 08 Javascript
详解原生JS动态添加和删除类
Mar 26 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的网址
2006/11/25 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
2019/06/05 PHP
破除一些网站复制、右键限制
2006/11/04 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
2013/04/12 Javascript
GRID拖拽行的实例代码
2013/07/18 Javascript
解决js中window.open弹出的是上次的缓存页面问题
2013/12/29 Javascript
javascript Array 数组常用方法
2015/04/05 Javascript
hovertree插件实现二级树形菜单(简单实用)
2016/12/28 Javascript
利用JS实现简单的日期选择插件
2017/01/23 Javascript
js实现倒计时效果(小于10补零)
2017/03/08 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
jQuery使用bind函数实现绑定多个事件的方法
2017/10/11 jQuery
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
VUE2.0中Jsonp的使用方法
2018/05/22 Javascript
详解webpack模块加载器兼打包工具
2018/09/11 Javascript
Vue.js子组件向父组件通信的方法实例代码详解
2018/12/10 Javascript
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
2014/11/06 Python
Python用于学习重要算法的模块pygorithm实例浅析
2018/08/16 Python
python 列表递归求和、计数、求最大元素的实例
2018/11/28 Python
python获取array中指定元素的示例
2019/11/26 Python
Pytorch 使用 nii数据做输入数据的操作
2020/05/26 Python
用opencv给图片换背景色的示例代码
2020/07/08 Python
如何利用Python写个坦克大战
2020/11/18 Python
HTML页面中添加Canvas标签示例
2015/01/01 HTML / CSS
土耳其新趋势女装购物网站:Addax
2020/01/07 全球购物
Collection和Collections的区别
2016/05/02 面试题
幼儿教育感言
2014/02/05 职场文书
我爱读书演讲稿
2014/05/07 职场文书
十八大演讲稿
2014/05/22 职场文书
三月雷锋月活动总结
2014/07/03 职场文书
小学向国旗敬礼活动方案
2014/09/27 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书
Pytorch使用shuffle打乱数据的操作
2021/05/20 Python
python3读取文件指定行的三种方法
2021/05/24 Python
Python 如何实现文件自动去重
2021/06/02 Python
使用python绘制分组对比柱状图
2022/04/21 Python