微信小程序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 动态修改样式和层叠样式表代码
Apr 27 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
Aug 26 Javascript
VUEJS实战之构建基础并渲染出列表(1)
Jun 13 Javascript
AngularJS基础 ng-value 指令简单示例
Aug 03 Javascript
Bootstrap基本样式学习笔记之表格(2)
Dec 07 Javascript
详解Vue路由History mode模式中页面无法渲染的原因及解决
Sep 28 Javascript
layui radio性别单选框赋值方法
Aug 15 Javascript
30分钟快速实现小程序语音识别功能
Nov 27 Javascript
JavaScript实现图片轮播特效
Oct 23 Javascript
手把手带你入门微信小程序新框架Kbone的使用
Feb 25 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
Oct 17 Javascript
vite+vue3.0+ts+element-plus快速搭建项目的实现
Jun 24 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
php遍历树的常用方法汇总
2015/06/18 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
laravel-admin 中列表筛选方法
2019/10/03 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
2020/05/15 PHP
JS前端框架关于重构的失败经验分享
2013/03/17 Javascript
js window.onload 加载多个函数和追加函数详解
2014/01/08 Javascript
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
2015/07/27 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
2015/10/30 Javascript
jQuery Ajax页面局部加载方法汇总
2016/06/02 Javascript
浅析JavaScript函数的调用模式
2016/08/10 Javascript
jQuery 特性操作详解及实例代码
2016/09/29 Javascript
JavaScript实现256色转灰度图
2017/02/22 Javascript
详解Angular 开发环境搭建
2017/06/22 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
vue中datepicker的使用教程实例代码详解
2019/07/08 Javascript
Postman内建变量常用方法实例解析
2020/07/28 Javascript
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
CentOS中升级Python版本的方法详解
2017/07/10 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
python实现剪切功能
2019/01/23 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
2019/08/02 Python
Python itertools.product方法代码实例
2020/03/27 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
意大利自行车商店:Cingolani Bike Shop
2019/09/03 全球购物
班长岗位职责
2013/11/10 职场文书
总经理助理职责
2014/02/04 职场文书
简历里的自我评价范文
2014/02/24 职场文书
政府个人对照检查材料
2014/08/28 职场文书
教师作风整顿个人剖析材料
2014/10/10 职场文书
优秀教师事迹材料
2014/12/15 职场文书
财务人员个人工作总结
2015/02/27 职场文书
幼儿园庆六一主持词
2015/06/30 职场文书
新人入职感言
2015/07/31 职场文书
新课程改革心得体会
2016/01/22 职场文书