微信小程序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之小练习代码
Oct 12 Javascript
JavaScript 常用函数
Dec 30 Javascript
Js组件的一些写法
Sep 10 Javascript
jQuery实现可编辑的表格实例讲解(2)
Sep 17 Javascript
Document.body.scrollTop的值总为零的快速解决办法
Jun 09 Javascript
angularJS之$http:与服务器交互示例
Mar 17 Javascript
JS实现求数组起始项到终止项之和的方法【基于数组扩展函数】
Jun 13 Javascript
使用selenium抓取淘宝的商品信息实例
Feb 06 Javascript
angular 实时监听input框value值的变化触发函数方法
Aug 31 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
Sep 15 Javascript
微信小程序实现禁止分享代码实例
Oct 19 Javascript
JavaScript JSON使用原理及注意事项
Jul 30 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常用的缓存技术汇总
2014/05/05 PHP
PHP可变变量学习小结
2015/11/29 PHP
php 在字符串指定位置插入新字符的简单实现
2016/06/28 PHP
php中序列化与反序列化详解
2017/02/13 PHP
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
js 数组操作之pop,push,unshift,splice,shift
2014/01/29 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
2014/05/02 Javascript
jquery获取tagName再进行判断
2014/05/29 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
2015/08/24 Javascript
vue数据初始化initState的实例详解
2019/04/11 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
2019/09/10 Javascript
Layer.js实现表格溢出内容省略号显示,悬停显示全部的方法
2019/09/16 Javascript
vue 自定义右键样式的实例代码
2019/11/06 Javascript
解决vuex刷新数据消失问题
2020/11/12 Javascript
[04:41]2014DOTA2国际邀请赛 Liquid顺利突围晋级正赛
2014/07/09 DOTA
可用于监控 mysql Master Slave 状态的python代码
2013/02/10 Python
Python中if __name__ == &quot;__main__&quot;详细解释
2014/10/21 Python
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
Python在Console下显示文本进度条的方法
2016/02/14 Python
python3编码问题汇总
2016/09/06 Python
Python科学计算之Pandas详解
2017/01/15 Python
Python进程间通信之共享内存详解
2017/10/30 Python
Python判断变量名是否合法的方法示例
2019/01/28 Python
python实现梯度下降算法的实例详解
2020/08/17 Python
军校制空专业毕业生自我鉴定
2013/11/16 职场文书
便利店的创业计划书
2014/01/15 职场文书
宣传活动总结范文
2014/07/01 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
青春雷锋观后感
2015/06/10 职场文书
篮球赛新闻稿
2015/07/17 职场文书
解除租赁合同协议书
2016/03/21 职场文书
中秋节英文祝福语句(14句)
2019/09/11 职场文书
教你用python实现12306余票查询
2021/06/30 Python
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android