微信小程序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 相关文章推荐
Jquery从头学起第四讲 jquery入门教程
Aug 01 Javascript
js两行代码按指定格式输出日期时间
Oct 21 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
Jun 09 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
Nov 25 Javascript
基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
May 12 Javascript
js基于setTimeout与setInterval实现多线程
Jun 17 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
Nov 05 Javascript
老生常谈原生JS执行环境与作用域
Nov 22 Javascript
JavaScript cookie详解及简单实例应用
Dec 31 Javascript
js实现手机拍照上传功能
Jan 17 Javascript
Vue 换肤的示例实践
Jan 23 Javascript
vue 的keep-alive缓存功能的实现
Mar 22 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中的常用函数回顾
2013/07/11 PHP
PHP永久登录、记住我功能实现方法和安全做法
2015/04/27 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
JavaScript的strict模式与with关键字介绍
2014/02/08 Javascript
JS父页面与子页面相互传值方法
2014/03/05 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
2014/07/18 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
JavaScript中的console.time()函数详细介绍
2014/12/29 Javascript
JavaScript DOM操作表格及样式
2015/04/13 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
javascript cookie的简单应用
2016/02/24 Javascript
详解angular部署到iis出现404解决方案
2018/08/14 Javascript
JavaScript实现的九种排序算法
2019/03/04 Javascript
javascript json对象小技巧之键名作为变量用法分析
2019/11/11 Javascript
js实现简单的贪吃蛇游戏
2020/04/23 Javascript
基于JavaScript实现控制下拉列表
2020/05/08 Javascript
微信小程序实现列表的横向滑动方式
2020/07/15 Javascript
vue实现把接口单独存放在一个文件方式
2020/08/13 Javascript
JavaScript实现H5接金币功能(实例代码)
2021/02/22 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
python编码总结(编码类型、格式、转码)
2016/07/01 Python
对python requests的content和text方法的区别详解
2018/10/11 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
Python 利用切片从列表中取出一部分使用的方法
2019/02/01 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
彪马日本官网:PUMA日本
2019/01/31 全球购物
大学生表扬信范文
2014/01/09 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
行政撤诉申请书
2015/05/18 职场文书
运动会通讯稿50字
2015/07/20 职场文书
TensorFlow的自动求导原理分析
2021/05/26 Python
vue+elementUI实现表格列的显示与隐藏
2022/04/13 Vue.js
使用refresh_token实现无感刷新页面
2022/04/26 Javascript