微信小程序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 滑入滑出效果实现代码
Mar 27 Javascript
可以用鼠标拖动的DIV实现思路及代码
Oct 21 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
Jan 31 Javascript
JavaScript数组随机排列实现随机洗牌功能
Mar 19 Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
Aug 13 Javascript
封装属于自己的JS组件
Jan 27 Javascript
jQuery实现的多滑动门,多选项卡效果代码
Mar 28 Javascript
jQuery遍历DOM元素与节点方法详解
Apr 14 Javascript
jquery DataTable实现前后台动态分页
Jun 17 jQuery
jQuery基于闭包实现的显示与隐藏div功能示例
Jun 09 jQuery
JavaScript实现预览本地上传图片功能完整示例
Mar 08 Javascript
element多个表单校验的实现
May 27 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
session 的生命周期是多长
2006/10/09 PHP
phpword插件导出word文件时中文乱码问题处理方案
2014/08/19 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
2014/11/22 PHP
php修改文件上传限制方法汇总
2015/04/07 PHP
PHP+Mysql+jQuery中国地图区域数据统计实例讲解
2015/10/10 PHP
Laravel修改验证提示信息为中文的示例
2019/10/23 PHP
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
javascript中mouseover、mouseout使用详解
2015/07/19 Javascript
基于OL2实现百度地图ABCD marker的效果
2015/10/01 Javascript
功能强大的Bootstrap使用手册(一)
2016/08/02 Javascript
ionic环境配置及问题详解
2017/06/27 Javascript
vue Render中slots的使用的实例代码
2017/07/19 Javascript
vue使用$emit时,父组件无法监听到子组件的事件实例
2018/02/26 Javascript
js使用文件流下载csv文件的实现方法
2019/07/15 Javascript
为什么Vue3.0使用Proxy实现数据监听(defineProperty表示不背这个锅)
2019/10/14 Javascript
[49:54]Ti4 循环赛第三日 LGD vs Titan
2014/07/12 DOTA
[01:25]2015国际邀请赛最佳短片奖——斧王《拆塔英雄:天赋异禀》
2015/09/22 DOTA
[01:44]Ti10举办地公布
2019/08/25 DOTA
[53:10]完美世界DOTA2联赛决赛日 FTD vs GXR 第二场 11.08
2020/11/11 DOTA
python进程管理工具supervisor使用实例
2014/09/17 Python
Python多线程编程简单介绍
2015/04/13 Python
简单介绍Python中的decode()方法的使用
2015/05/18 Python
Python实现控制台进度条功能
2016/01/04 Python
python flask 多对多表查询功能
2017/06/25 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
使用python+poco+夜神模拟器进行自动化测试实例
2020/04/23 Python
Python pysnmp使用方法及代码实例
2020/08/24 Python
canvas实现圆绘制的示例代码
2019/09/11 HTML / CSS
西班牙最大的婴儿用品网上商店:Bebitus
2019/05/30 全球购物
荷兰音乐会和音乐剧门票订购网站:Topticketshop
2019/08/27 全球购物
电信营业员岗位职责
2015/04/14 职场文书
小人国观后感
2015/06/11 职场文书
2016年大学生暑假爱心支教活动策划书
2015/11/26 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书