微信小程序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编程起步(第六课)
Feb 27 Javascript
Javascript中的getUTCDay()方法使用详解
Jun 10 Javascript
使用Browserify配合jQuery进行编程的超级指南
Jul 28 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
Sep 01 Javascript
JS更改select内option属性的方法
Oct 14 Javascript
jQuery 选择器(61种)整理总结
Sep 26 Javascript
JS实现的样式切换功能tableCSS实例
Dec 30 Javascript
layui.js实现的表单验证功能示例
Nov 15 Javascript
Angular实现双向折叠列表组件的示例代码
Nov 21 Javascript
Vue2.0实现简单分页及跳转效果
Jul 29 Javascript
jQuery使用jsonp实现百度搜索的示例代码
Jul 08 jQuery
从表单校验看JavaScript策略模式的使用详解
Oct 17 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简单实现多语言切换的方法
2016/05/09 PHP
php 生成签名及验证签名详解
2016/10/26 PHP
php cookie 详解使用实例
2016/11/03 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
JavaScript高级程序设计
2006/12/29 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
Mac地址验证的javascript代码
2013/11/09 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
2014/09/26 Javascript
JS解析XML实例分析
2015/01/30 Javascript
浅谈使用MVC模式进行JavaScript程序开发
2015/11/10 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
JS中使用 after 伪类清除浮动实例
2017/03/01 Javascript
jQuery获取table表中的td标签(实例讲解)
2017/07/28 jQuery
基于JavaScript获取base64图片大小
2019/10/18 Javascript
[00:31]DOTA2上海特级锦标赛 Fnatic战队宣传片
2016/03/04 DOTA
[02:02:38]VG vs Mineski Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Python入门_浅谈逻辑判断与运算符
2017/05/16 Python
Django项目中包含多个应用时对url的配置方法
2018/05/30 Python
Anaconda之conda常用命令介绍(安装、更新、删除)
2019/10/06 Python
使用Python制作新型冠状病毒实时疫情图
2020/01/28 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
2020/11/18 Python
MSC邮轮官方网站:加勒比海、地中海和世界各地的假期
2018/08/27 全球购物
ORLY官网:美国专业美甲一线品牌
2019/12/11 全球购物
法国在线药房:DoctiPharma
2020/10/21 全球购物
请描述一下”is a”关系和”has a”关系
2015/02/03 面试题
华为python面试题
2016/05/03 面试题
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
驾驶员岗位职责
2014/01/29 职场文书
致铅球运动员加油稿
2014/02/13 职场文书
婚内房产协议书范本
2014/10/02 职场文书
教师群众路线教育实践活动学习笔记
2014/11/05 职场文书
2014年酒店工作总结范文
2014/11/17 职场文书
刑事撤诉申请书
2015/05/18 职场文书
告知书格式
2015/07/01 职场文书
XX部保密工作制度范本
2019/08/27 职场文书