微信小程序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 相关文章推荐
浅谈JavaScript中面向对象技术的模拟
Sep 25 Javascript
jquery js 重置表单 reset()具体实现代码
Aug 05 Javascript
选择复选框按钮置灰否则按钮可用
May 22 Javascript
jQuery.trim() 函数及trim()用法详解
Oct 26 Javascript
浅析jQuery Ajax请求参数和返回数据的处理
Feb 24 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
Aug 03 Javascript
微信小程序 图片加载(本地,网路)实例详解
Mar 10 Javascript
JS实现AES加密并与PHP互通的方法分析
Apr 19 Javascript
vue-cli如何快速构建vue项目
Apr 26 Javascript
了解javascript中let和var及const关键字的区别
May 24 Javascript
jquery.tagsinput.js实现记录checkbox勾选的顺序
Sep 21 jQuery
JavaScript的console命令使用实例
Dec 03 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
2020显卡排行榜天梯图 显卡天梯图2020年3月最新版
2020/04/02 数码科技
THINKPHP+JS实现缩放图片式截图的实现
2010/03/07 PHP
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
js jq 单击和双击区分示例介绍
2013/11/05 Javascript
jQuery1.9.1针对checkbox的调整方法(prop)
2014/05/01 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
JavaScript数据结构之数组的表示方法示例
2017/04/12 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
react-router v4如何使用history控制路由跳转详解
2018/01/09 Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
2018/01/18 Javascript
详解如何使用微信小程序云函数发送短信验证码
2019/03/13 Javascript
Layui tree 下拉菜单树的实例代码
2019/09/21 Javascript
JavaScript监听触摸事件代码实例
2019/12/30 Javascript
js实现中文实时时钟
2020/01/15 Javascript
微信小程序基于高德地图API实现天气组件(动态效果)
2020/10/22 Javascript
[49:17]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第三场 1月26日
2021/03/11 DOTA
简单介绍Python的Tornado框架中的协程异步实现原理
2015/04/23 Python
详解Python读取配置文件模块ConfigParser
2017/05/11 Python
教你用Python创建微信聊天机器人
2020/03/31 Python
python实现机器学习之多元线性回归
2018/09/06 Python
Django实现学生管理系统
2019/02/26 Python
PyTorch的深度学习入门教程之构建神经网络
2019/06/27 Python
Python字典的概念及常见应用实例详解
2019/10/30 Python
python生成大写32位uuid代码
2020/03/03 Python
基于opencv实现简单画板功能
2020/08/02 Python
python如何编写类似nmap的扫描工具
2020/11/06 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
主管职责范文
2013/11/09 职场文书
本科毕业生的求职信范文
2013/11/20 职场文书
秘书英文求职信
2014/04/16 职场文书
校园绿化美化方案
2014/06/08 职场文书
2014红色之旅心得体会
2014/10/07 职场文书
Python 装饰器(decorator)常用的创建方式及解析
2022/04/24 Python