当前位置: 首页 > news >正文

微信小程序使用 canvas 2d 实现签字板组件

本文是在微信小程序中使用 canvas 2d 来实现签字板功能;

效果图:
请添加图片描述
代码:
1、wxml

<view><canvas id="canvas"type="2d"bindtouchstart="start"bindtouchmove="move"bindtouchend="end"style="border: 1px solid #ccc; width:100%; height:800rpx"></canvas><view style="display: flex;"><button bindtap="clear">清除</button><button bindtap="save">保存</button></view><image src="{{canvanImg}}"></image>
</view>

2、js

Component({properties: {},data: {canvas:null,canvanImg:"",ctx:null},lifetimes:{ready(){let that = this;wx.createSelectorQuery().in(this).select("#canvas").fields({node:true,size:true}).exec((res)=>{let canvas = res[0].node;let ctx = canvas.getContext("2d");let dpr = wx.getSystemInfoSync().pixelRatio;canvas.width = res[0].width * dpr;canvas.height = res[0].height * dpr;ctx.fillStyle = "#fff";// 利用阴影,消除锯齿ctx.shadowBlur = 1;ctx.shadowColor = '#000';ctx.scale(dpr, dpr)that.setData({canvas,ctx})})}},methods: {//触摸开始start (e) {this.data.ctx.beginPath()this.data.ctx.moveTo(e.touches[0].x,e.touches[0].y)},//触摸移动move (e) {this.data.ctx.lineTo(e.touches[0].x, e.touches[0].y)this.data.ctx.stroke()//将上下文绘制到canvas中},//触摸结束end (e) {this.data.ctx.closePath()},//清除画布内容clear(){this.data.ctx.clearRect(0, 0,this.data.canvas.width, this.data.canvas.height)this.setData({canvanImg:""})},//点击保存生成图片save(){this.setData({canvanImg:this.data.canvas.toDataURL("image/png")})},}
})

3、总结
canvas 的宽度和高度可以写死,也可以根据当前可是区域动态计算;需要注意的是 res[0].node 的宽度和高度的计算是当前 canvas 元素上的宽度和高度乘设备的 pixelRatio ;

http://www.lryc.cn/news/106380.html

相关文章:

  • 区块链赋能新时代司法体系,中移链打造可信存证服务
  • ELK报错no handler found for uri and method [PUT] 原因
  • Sublime操作技巧笔记
  • JVM | 基于类加载的一次完全实践
  • Termux实现电脑端远程操作【开启SSH的完整教程】
  • java(Collection类)
  • VS2019编译安装OpenMesh8.0
  • Python爬虫遇到URL错误解决办法大全
  • 基于Vue+ElementUI+Echarts+G2Plot的大屏设计器,代码完全开源
  • Linux - PostgreSQL 适用于9.x 以上的 tar.gz 源码安装与理解 - 报错集锦
  • Django使用用户列表的展示和添加
  • kubernetes错误汇总
  • [openCV]基于拟合中线的智能车巡线方案V4
  • 【网络云盘客户端】——上传文件的功能的实现
  • WebView2对比CefSharp的超强优势
  • 前端需要知道的计算机网络知识
  • [2023杭电多校5 1005] Snake (生成函数)
  • 【MyBtis】各种查询功能
  • H5打包封装小程序系统开发
  • SpringBoot集成jasypt,加密yml配置文件
  • 【C++】模板(初阶)
  • windows下的txt文档,传到ubuntu后,每行后面出现^M,怎么处理?
  • LabVIEW FPGA开发实时滑动摩擦系统
  • Prometheus服务器、Prometheus被监控端、Grafana、Prometheus服务器、Prometheus被监控端、Grafana
  • 常见的锁策略(面试八股文)
  • SO_KEEPALIVE、TCP_KEEPIDLE、TCP_KEEPINTVL、保活包
  • 【phaser微信抖音小游戏开发005】画布上添加图片
  • 【设计模式——学习笔记】23种设计模式——外观模式Facade(原理讲解+应用场景介绍+案例介绍+Java代码实现)
  • 消息队列 -提供上层服务接口
  • maven引入本地jar包的简单方式【IDEA】【SpringBoot】