本文主要介绍了微信小程序实现的涂鸦功能,涉及微信小程序事件响应及画笔的相关操作技巧,并附带源码供读者下载参考,需要的朋友可以参考下,希望能帮助到大家。

先来看看运行效果:

布局文件index.wxml:

disable-scroll="false"

bindtouchstart="touchStart"

bindtouchmove="touchMove"

bindtouchend="touchEnd">

逻辑功能文件index.js:

Page({

data:{

pen : 3, //画笔粗细默认值

color : '#cc0033' //画笔颜色默认值

},

startX: 0, //保存X坐标轴变量

startY: 0, //保存X坐标轴变量

isClear : false, //是否启用橡皮擦标记

//手指触摸动作开始

touchStart: function (e) {

//得到触摸点的坐标

this.startX = e.changedTouches[0].x

this.startY = e.changedTouches[0].y

this.context = wx.createContext()

if(this.isClear){ //判断是否启用的橡皮擦功能 ture表示清除 false表示画画

this.context.setStrokeStyle('#F8F8F8') //设置线条样式 此处设置为画布的背景颜色 橡皮擦原理就是:利用擦过的地方被填充为画布的背景颜色一致 从而达到橡皮擦的效果

this.context.setLineCap('round') //设置线条端点的样式

this.context.setLineJoin('round') //设置两线相交处的样式

this.context.setLineWidth(20) //设置线条宽度

this.context.save(); //保存当前坐标轴的缩放、旋转、平移信息

this.context.beginPath() //开始一个路径

this.context.arc(this.startX,this.startY,5,0,2*Math.PI,true); //添加一个弧形路径到当前路径,顺时针绘制 这里总共画了360度 也就是一个圆形

this.context.fill(); //对当前路径进行填充

this.context.restore(); //恢复之前保存过的坐标轴的缩放、旋转、平移信息

}else{

this.context.setStrokeStyle(this.data.color)

this.context.setLineWidth(this.data.pen)

this.context.setLineCap('round') // 让线条圆润

this.context.beginPath()

}

},

//手指触摸后移动

touchMove: function (e) {

var startX1 = e.changedTouches[0].x

var startY1 = e.changedTouches[0].y

if(this.isClear){ //判断是否启用的橡皮擦功能 ture表示清除 false表示画画

this.context.save(); //保存当前坐标轴的缩放、旋转、平移信息

this.context.moveTo(this.startX,this.startY); //把路径移动到画布中的指定点,但不创建线条

this.context.lineTo(startX1,startY1); //添加一个新点,然后在画布中创建从该点到最后指定点的线条

this.context.stroke(); //对当前路径进行描边

this.context.restore() //恢复之前保存过的坐标轴的缩放、旋转、平移信息

this.startX = startX1;

this.startY = startY1;

}else{

this.context.moveTo(this.startX, this.startY)

this.context.lineTo(startX1, startY1)

this.context.stroke()

this.startX = startX1;

this.startY = startY1;

}

//只是一个记录方法调用的容器,用于生成记录绘制行为的actions数组。context跟不存在对应关系,一个context生成画布的绘制动作数组可以应用于多个

wx.drawCanvas({

canvasId: 'myCanvas',

reserve: true,

actions: this.context.getActions() // 获取绘图动作数组

})

},

//手指触摸动作结束

touchEnd: function () {

},

//启动橡皮擦方法

clearCanvas: function(){

if(this.isClear){

this.isClear = false;

}else{

this.isClear = true;

}

},

penSelect: function(e){ //更改画笔大小的方法

console.log(e.currentTarget);

this.setData({pen:parseInt(e.currentTarget.dataset.param)});

this.isClear = false;

},

colorSelect: function(e){ //更改画笔颜色的方法

console.log(e.currentTarget);

this.setData({color:e.currentTarget.dataset.param});

this.isClear = false;

}

})

大家学会了吗?赶紧动手尝试一下吧。

相关推荐:

php 涂鸦,微信小程序涂鸦功能的实现相关推荐

  1. 微信小程序插件功能页开发详细流程

     有问题可以扫码加我微信,有偿解决问题.承接小程序开发. 微信小程序开发交流qq群   173683895  . 526474645 : 正文: 关于新出的微信小程序插件功能页做一下记录,希望能帮到大 ...

  2. 微信小程序php后台支付,微信小程序 支付功能实现PHP实例详解

    微信小程序 支付功能实现PHP实例详解 前端代码: wx.request({ url: 'https://www.yourhost.com/weixin/WeiActivity/payJoinfee' ...

  3. 微信 php收藏功能实现,关于微信小程序收藏功能的实现

    这篇文章主要介绍了微信小程序收藏功能的实现代码,基本功能是点击收藏后显示已收藏,在另一个页面出现目前点击收藏的项目.需要的朋友可以参考下 需求 点击收藏后显示已收藏,在另一个页面出现目前点击收藏的项目 ...

  4. python个人微信支付接口_Python实现微信小程序支付功能

    正文 由于最近自己在做小程序的支付,就在这里简单介绍一下讲一下用python做小程序支付这个流程.当然在进行开发之前还是建议读一下具体的流程,清楚支付的过程. 1.支付交互流程 2.获取openid( ...

  5. vc++6.0获取磁盘基本信息_微信小程序——常用功能2:微信小程序用户登录,申请用户授权并获取用户基本信息...

    微信小程序--常用功能2:申请用户授权并获取用户基本信息 为了更好的用户体验,很多时候我们想要获取用户的基本信息,从而实现将信息呈现到用户界面.给用户划分地域.给用户分类等功能. 但是要想获取用户信息 ...

  6. python微信小程序抢购_Python实现微信小程序支付功能!Python确实强的一批!

    正文 由于最近自己在做小程序的支付,就在这里简单介绍一下讲一下用python做小程序支付这个流程.当然在进行开发之前还是建议读一下具体的流程,清楚支付的过程. 1.支付交互流程 2.获取openid( ...

  7. 微信小程序支付功能用服务器吗,微信小程序 支付功能 服务器端(TP5.1)实现...

    首先下载微信支付SDK ,将整个目录的文件放在 /application/extend/WxPay 目录下 在使用SDK之前我们需要对 WxPay.Config.php 进行配置 namespace ...

  8. 智慧物业小程序_物业小程序物业微信小程序目前功能最全的物业小程序

    原标题:物业小程序物业微信小程序目前功能最全的物业小程序 以物业管理为核心,打造智慧社区云微信小程序管理平台,已入驻腾讯海纳社区,物业微信小程序,解决传统物业管理难,乱差的问题,利用微信小程序提供一整 ...

  9. SpringBoot对接微信小程序支付功能开发(一,下单功能)

    1,接入前准备: 接入模式选择直连模式: 申请小程序,得到APPID,并开通微信支付: 申请微信商户号,得到mchid,并绑定APPID: 配置商户API key,下载并配置商户证书,根据微信官方文档 ...

最新文章

  1. 为啥辣椒会辣得人嘴巴疼?这个问题竟然和今年诺奖有关
  2. oracle中表空间的相关操作
  3. Android Studio之gradle的配置与介绍
  4. ActFrameWork集成Beetlsql的Mapper功能
  5. 经验 | 非科班出身怎么转行计算机?
  6. leetcode讲解--169. Majority Element
  7. 干掉Spring Cloud和Dubbo!阿里这个神级框架究竟有多牛?
  8. 转一篇:如何快速的修改参考文献
  9. python shell运行_Python 执行 Shell 命令
  10. 编写业务逻辑代码-清晰可维护是很重要的
  11. Stream流的学习
  12. 如何提高idea运行的速度
  13. 美国入境前的EVUS登记图文指南
  14. BFT-SMaRt:用Netty做客户端的可靠信道
  15. Android 渐变色背景
  16. 自动化(四)appium真机远程控制和远程群控
  17. Linux操作系统下的串口通信
  18. altera fpga 型号说明_Altera FPGA管脚说明
  19. 没有选择的选择才能坚持和专注
  20. 云台和吊舱 最基本的拍摄吊舱由专业的摄像设备和高精度的增稳云台构成。

热门文章

  1. Excel基础教程(1)
  2. 笔记本计算机无线开关在哪里,笔记本的WIFI开关在哪里 笔记本WIFI打开方法
  3. S3C2440 I2C实现
  4. 中首清算质疑偶像演员不适合演抗战剧?《雷霆战将》三大还原引争议
  5. python机器学习思维导图脑图(完整版)
  6. U盘制作windows启动安装盘后,U盘容量缩小
  7. ps,pr,3Dmax软件使用经验
  8. mac 开启android 模拟器,Mac下安卓模拟器环境配置
  9. python编游戏_python编的著名游戏
  10. 电脑打死都连不上手机热点问题