微信小程序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 相关文章推荐
表单内同名元素的控制
Nov 22 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
Dec 18 Javascript
javascript中定义私有方法说明(private method)
Jan 27 Javascript
html5+javascript制作简易画板附图
Apr 25 Javascript
AngularJS directive返回对象属性详解
Mar 28 Javascript
ArtEditor富文本编辑器增加表单提交功能
Apr 18 Javascript
jQuery纵向导航菜单效果实现方法
Dec 19 Javascript
jQuery实现立体式数字动态增加(animate方法)
Dec 21 Javascript
超全面的vue.js使用总结
Feb 12 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
Apr 10 Javascript
vue项目使用微信公众号支付总结及遇到的坑
Oct 23 Javascript
js+canvas实现纸牌游戏
Mar 16 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 5.0 Pear安装方法
2006/12/06 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
PHP并发查询MySQL的实例代码
2017/08/09 PHP
基于jquery的Repeater实现代码
2010/07/17 Javascript
jQuery on()方法使用技巧详解
2015/04/16 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
AngularJS获取json数据的方法详解
2017/05/27 Javascript
jquery dataTable 后台加载数据并分页实例代码
2017/06/07 jQuery
jquery实现图片跟随鼠标的实例
2017/10/17 jQuery
利用原生的JavaScript实现简单拼图游戏
2018/11/18 Javascript
python用装饰器自动注册Tornado路由详解
2017/02/14 Python
Python设计实现的计算器功能完整实例
2017/08/18 Python
python 利用turtle库绘制笑脸和哭脸的例子
2019/11/23 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
解决python中显示图片的plt.imshow plt.show()内存泄漏问题
2020/04/24 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
总结30个CSS3选择器
2017/04/13 HTML / CSS
关于Java String的一道面试题
2013/09/29 面试题
在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern "C"
2014/08/09 面试题
.net笔试题
2014/03/03 面试题
最新大学生自我评价
2013/09/24 职场文书
课改先进个人汇报材料
2014/01/26 职场文书
《地震中的父与子》教学反思
2014/04/10 职场文书
安全生产计划书
2014/05/04 职场文书
感恩母亲节演讲稿
2014/05/07 职场文书
工程学毕业生自荐信
2014/06/14 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
全国法院系统开展党的群众路线教育实践活动综述(全文)
2014/10/25 职场文书
企业整改报告范文
2014/11/08 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
违纪学生保证书
2015/02/27 职场文书
中学生自我评价范文
2015/03/03 职场文书
小学生光盘行动倡议书
2015/04/28 职场文书
幼儿园迎新生欢迎词
2015/09/30 职场文书
教师正风肃纪心得体会
2016/01/15 职场文书
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis