微信小程序canvas写字板效果及实例


Posted in Javascript onJune 15, 2017

微信小程序canvas写字板效果及实例

写字板效果:书写文字,画板重置,导出图片,导出图片前判断是否书写内容

微信小程序canvas写字板效果及实例微信小程序canvas写字板效果及实例

app.json:

添加一个路由:"pages/canvas/canvas"

{
 "pages":[
  "pages/index/index",
  "pages/logs/logs",
  "pages/canvas/canvas"
 ],
 "window":{
  "navigationBarBackgroundColor": "#ea6a46",
  "navigationBarTextStyle":"white",
  "navigationBarTitleText": "写字板",
  "backgroundTextStyle":"dark",
  "backgroundColor":"white",
  "enablePullDownRefresh":"true"
 }
}

然后就是:

canvas.wxml:

<!--pages/canvas/canvas.wxml-->
<canvas class="canvas" id="canvas" canvas-id="canvas" disable-scroll="true" bindtouchstart="canvasStart" bindtouchmove="canvasMove" bindtouchend="canvasEnd" touchcancel="canvasEnd" binderror="canvasIdErrorCallback"></canvas>
<button type="default" bindtap="cleardraw">清除画布</button>
<button type="default" bindtap="getimg">导出图片</button>

canvas.js:

// canvas 全局配置
var context = null;// 使用 wx.createContext 获取绘图上下文 context
var isButtonDown = false;
var arrx = [];
var arry = [];
var arrz = [];
var canvasw = 0;
var canvash = 0;
//获取系统信息
wx.getSystemInfo({
 success: function (res) {
  canvasw = res.windowWidth;//设备宽度
  canvash = res.windowWidth*7/15;
 }
});
//注册页面
Page({
 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);
  //context.moveTo(event.changedTouches[0].x, event.changedTouches[0].y);
  
 },
 canvasMove: function (event) {
  if (isButtonDown) {
   arrz.push(1);
   arrx.push(event.changedTouches[0].x);
   arry.push(event.changedTouches[0].y);
   // context.lineTo(event.changedTouches[0].x, event.changedTouches[0].y);
   // context.stroke();
   // context.draw()

  }; 
  
  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.stroke();
  
  context.draw(true);
 },
 canvasEnd: function (event) {
  isButtonDown = false; 
 },
 cleardraw: function () {
  //清除画布
  arrx = [];
  arry = [];
  arrz = [];
  context.clearRect(0, 0, canvasw, canvash);
  context.draw(true);
 },
 getimg: function(){
  if (arrx.length==0){
   wx.showModal({
    title: '提示',
    content: '签名内容不能为空!',
    showCancel: false
   });
   return false;
  };
  //生成图片
  wx.canvasToTempFilePath({
   canvasId: 'canvas',
   success: function (res) {
    console.log(res.tempFilePath);
    //存入服务器
    wx.uploadFile({
     url: 'a.php', //接口地址
     filePath: res.tempFilePath,
     name: 'file',
     formData: {                 //HTTP 请求中其他额外的 form data 
      'user': 'test'
     },
     success: function (res) {
      console.log(res);
     },
     fail: function (res) {
      console.log(res);
     },
     complete: function (res) {
      
     }
    });
   }
  })

 },
 /**
  * 页面的初始数据
  */
 data: {
  src: ""
 },
 /**
  * 生命周期函数--监听页面加载
  */
 onLoad: function (options) {
  // 使用 wx.createContext 获取绘图上下文 context
  context = wx.createCanvasContext('canvas');
  context.beginPath() 
  context.setStrokeStyle('#000000');
  context.setLineWidth(4);
  context.setLineCap('round');
  context.setLineJoin('round');


 }
})

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
js动态创建表格,删除行列的小例子
Jul 20 Javascript
javascript计时器详解
Feb 28 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
Mar 02 Javascript
浅谈JavaScript中的字符编码转换问题
Jul 07 Javascript
第五章之BootStrap 栅格系统
Apr 25 Javascript
javaScript给元素添加多个class的简单实现
Jul 20 Javascript
基于JS实现类似支付宝支付密码输入框
Sep 02 Javascript
js简单正则验证汉字英文及下划线的方法
Nov 28 Javascript
JavaScript自定义文本框光标
Mar 05 Javascript
详解Vue的computed(计算属性)使用实例之TodoList
Aug 07 Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
Jan 03 Javascript
vue-列表下详情的展开与折叠案例
Jul 28 Javascript
AngularJs实现聊天列表实时刷新功能
Jun 15 #Javascript
bootstrap daterangepicker双日历时间段选择控件详解
Jun 15 #Javascript
详解react-router如何实现按需加载
Jun 15 #Javascript
jQuery实现 RadioButton做必选校验功能
Jun 15 #jQuery
bootstrap daterangepicker汉化以及扩展功能
Jun 15 #Javascript
validationEngine 表单验证插件使用实例代码
Jun 15 #Javascript
JS 设置Cookie 有效期 检测cookie
Jun 15 #Javascript
You might like
php数组函数序列之array_sum() - 计算数组元素值之和
2011/10/29 PHP
全新的PDO数据库操作类php版(仅适用Mysql)
2012/07/22 PHP
php+highchats生成动态统计图
2014/05/21 PHP
php实现将字符串按照指定距离进行分割的方法
2015/03/14 PHP
Yii2框架实现注册和登录教程
2016/09/30 PHP
javascript多种数据类型表格排序代码分析
2010/09/11 Javascript
JSON.stringify 语法实例讲解
2012/03/14 Javascript
nodejs教程之环境安装及运行
2014/11/21 NodeJs
学习掌握JavaScript中this的使用技巧
2016/08/29 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
温故知新——JavaScript中的字符串连接问题最全总结(推荐)
2017/08/21 Javascript
react配置antd按需加载的使用
2019/02/11 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
微信小程序8种数据通信的方式小结
2020/02/03 Javascript
基于js实现数组相邻元素上移下移
2020/05/19 Javascript
vue2.0 解决抽取公用js的问题
2020/07/31 Javascript
Vue实现点击当前行变色
2020/12/14 Vue.js
python模拟登录百度代码分享(获取百度贴吧等级)
2013/12/27 Python
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
Python实现处理管道的方法
2015/06/04 Python
Python按行读取文件的简单实现方法
2016/06/22 Python
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
2018/01/16 Python
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
pandas apply 函数 实现多进程的示例讲解
2018/04/20 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
基于Python爬取素材网站音频文件
2020/10/21 Python
FC-Moto丹麦:欧洲最大的摩托车服装和头盔商店之一
2019/08/20 全球购物
工程造价管理专业大专生求职信
2013/10/06 职场文书
事业单位公务员的职业生涯规划
2014/01/15 职场文书
实验室的标语
2014/06/20 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
夫妻分居协议书范本
2014/11/28 职场文书
物流业务员岗位职责
2015/04/03 职场文书
Python中的min及返回最小值索引的操作
2021/05/10 Python
JVM入门之类加载与字节码技术(类加载与类的加载器)
2021/06/15 Java/Android
python数据分析之单因素分析线性拟合及地理编码
2022/06/25 Python