微信小程序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 31 Javascript
腾讯UED 漂亮的提示信息效果代码
Sep 12 Javascript
javascript对talbe进行动态添加、删除、验证实现代码
Mar 29 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
Dec 04 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
May 31 Javascript
几句话带你理解JS中的this、闭包、原型链
Sep 26 Javascript
jQuery中animate的几种用法与注意事项
Dec 12 Javascript
微信小程序利用co处理异步流程的方法教程
May 20 Javascript
JS通用方法触发点击事件代码实例
Feb 17 Javascript
基于ajax及jQuery实现局部刷新过程解析
Sep 12 jQuery
Vue和React有哪些区别
Sep 12 Javascript
vue使用localStorage持久性存储实现评论列表
Apr 14 Vue.js
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
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
php通过ajax实现双击table修改内容
2014/04/28 PHP
Yii2 rbac权限控制之rule教程详解
2016/06/23 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
一段效率很高的for循环语句使用方法
2007/08/13 Javascript
js更优雅的兼容
2010/08/12 Javascript
基于JavaScript 数据类型之Boolean类型分析介绍
2013/04/19 Javascript
jQuery异步验证用户名是否存在示例代码
2014/05/21 Javascript
javascript初学者常用技巧
2014/09/02 Javascript
node.js使用require()函数加载模块
2014/11/26 Javascript
node.js中的fs.appendFile方法使用说明
2014/12/17 Javascript
JavaScript学习笔记之Function对象
2015/01/22 Javascript
浅析Node.js 中 Stream API 的使用
2015/10/23 Javascript
JavaScript测试工具之Karma-Jasmine的安装和使用详解
2015/12/03 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
jQuery 出现Cannot read property ‘msie’ of undefined错误的解决方法
2016/11/23 Javascript
微信小程序 地图map实例详解
2017/06/07 Javascript
深入理解ES6的迭代器与生成器
2017/08/19 Javascript
详解vue中使用express+fetch获取本地json文件
2017/10/10 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
2018/01/16 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
vue实现日历备忘录功能
2020/09/24 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
Python中统计函数运行耗时的方法
2015/05/05 Python
Python实现递归遍历文件夹并删除文件
2016/04/18 Python
Django数据库操作的实例(增删改查)
2017/09/04 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
python操作toml文件的示例代码
2020/11/27 Python
荷兰鞋类购物网站:Donelli
2019/05/24 全球购物
银行柜员应聘推荐信范文
2013/11/24 职场文书
授权收款委托书
2014/09/23 职场文书
个人对照检查剖析材料
2014/10/13 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
2015年卫生局工作总结
2015/07/24 职场文书
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python
MySQL GRANT用户授权的实现
2021/06/18 MySQL