原生微信小程序canvas签名功能

embedded/2024/10/9 13:31:20/

半个月前百度搜出来的,没存书签现在不知道是哪篇文章了,再搜也没搜出来那篇文章,还好当时把代码复制到本地跑了一下,现在再发csdn存一下。

sign.js

Page({data: {ctx: null,width: null,height: null,drawCount: 0,drawState: "init"},onShow: function () {this.initCanvas()},initCanvas() {let {width,height} = this.datawidth = wx.getSystemInfoSync().windowWidthheight = wx.getSystemInfoSync().windowHeightconsole.log(wx.getSystemInfoSync())this.data.ctx = wx.createCanvasContext('canvas')this.setData({width,height})this.clearCanvas()},clearCanvas() {this.data.drawCount = 0this.data.drawState = "ing"this.data.ctx.setTextBaseline('top')this.data.ctx.setTextAlign('center')this.data.ctx.setFontSize(20)this.data.ctx.setFillStyle('#616165');this.data.ctx.fillText("请灰色区域内完成签名", this.data.width / 2, 30)this.data.ctx.draw(false)},catchtouchstart(e) {if (this.data.drawCount == 0) {this.data.ctx.draw(false)}this.data.drawCount++this.data.ctx.moveTo(e.changedTouches[0].clientX, e.changedTouches[0].clientY)},catchtouchmove(e) {if (this.data.drawState == "stop") returnthis.data.drawState = "ing"if (e.touches.length > 1) {return}this.data.ctx.setStrokeStyle('#000000');this.data.ctx.setLineWidth(3);this.data.ctx.setShadow(0, 0, 0.5, '#000000')this.data.ctx.setLineCap('round');this.data.ctx.setLineJoin('round');this.data.ctx.lineTo(e.changedTouches[0].clientX, e.changedTouches[0].clientY)this.data.ctx.stroke()this.data.ctx.draw(true)this.data.ctx.moveTo(e.changedTouches[0].clientX, e.changedTouches[0].clientY)},canvasToImg() {if (this.data.drawState == "init") returnthis.data.drawState = "stop"wx.canvasToTempFilePath({canvasId: 'canvas',success: res => {console.log(res.tempFilePath)// ...// 上传服务器wx.navigateTo({url: '/pages/showImg/showImg?src=' + res.tempFilePath,})}})}
})

sign.wxml

<canvas canvas-id="canvas" style="width:{{width+'px'}};height:{{height+'px'}}" catchtouchstart="catchtouchstart" catchtouchmove="catchtouchmove" catchtouchend="catchtouchend"></canvas>
<view class="btn-reset" catchtap="clearCanvas">重新绘制</view>
<view class="btn-ok" catchtap="canvasToImg">确认</view>

sign.wxss

page{position: relative;background-color: #f2f2f2;width: 100%;height: 100%;
}
canvas{width: 100%;height: 100vh;
}
.btn-reset{width: 100rpx;position: absolute;bottom: 10rpx;right: 160rpx;padding: 8rpx;text-align: center;border: 1rpx solid #4965B3;color: #4965B3;font-size: 18rpx;border-radius: 8rpx;box-sizing: border-box;
}
.btn-ok{width: 100rpx;position: absolute;bottom: 10rpx;right: 30rpx;padding: 8rpx;text-align: center;background-color: #4965B3;border: 1rpx solid #4965B3;color: #fff;font-size: 18rpx;border-radius: 8rpx;box-sizing: border-box;
}

sign.json

{"usingComponents": {}
}

开发者工具内签名效果


http://www.ppmy.cn/embedded/40911.html

相关文章

红黑树高度上限2log2(N+1)简洁证明【通俗易懂且正确!】

首先阅读这篇文章 https://fanlv.fun/2018/08/12/binary-tree/ 明白什么是满二叉树&#xff1f;什么是2-3树&#xff0c;红黑树如何转换成2-3树。 我们可以得知满二叉树节点n和高度h的关系。 n 2 h − 1 n 2^h-1 n2h−1 根据2-3树的构造规则&#xff0c;可知2-3树是一个满…

构建第一个ArkTS应用之@AppStorage:应用全局的UI状态存储

AppStorage是应用全局的UI状态存储&#xff0c;是和应用的进程绑定的&#xff0c;由UI框架在应用程序启动时创建&#xff0c;为应用程序UI状态属性提供中央存储。 和AppStorage不同的是&#xff0c;LocalStorage是页面级的&#xff0c;通常应用于页面内的数据共享。而AppStora…

145.二叉树的后序遍历

刷算法题&#xff1a; 第一遍&#xff1a;1.看5分钟&#xff0c;没思路看题解 2.通过题解改进自己的解法&#xff0c;并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步&#xff0c;下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…

C语言(指针)6

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸各位能阅读我的文章&#xff0c;诚请评论指点&#xff0c;关注收藏&#xff0c;欢迎欢迎~~ &#x1f4a5;个人主页&#xff1a;小羊在奋斗 &#x1f4a5;所属专栏&#xff1a;C语言 本系列文章为个人学习笔记&#x…

【GoLang基础】垃圾回收是如何工作的?

问题引出&#xff1a; Go语言中的垃圾回收是如何工作的&#xff1f; 解答&#xff1a; 在 Go 语言中&#xff0c;垃圾回收&#xff08;Garbage Collection&#xff0c;GC&#xff09;是自动管理内存的机制&#xff0c;用于在运行时识别和释放不再使用的内存对象&#xff0c;以…

理解安卓系统的三个时间

安卓设备有三种不同的可用时钟&#xff1a; System.currentTimeMillis()SystemClock.uptimeMillis()SystemClock.elapsedRealtime() 一、System.currentTimeMillis() System.currentTimeMillis()是一个标准的“墙”时钟(时间和日期)&#xff0c;表示从纪元到现在的毫秒数。该…

Spring学习笔记

目录 1. Spring有什么优势 1.1 模块化 1.2 轻量级 1.3 方便集成各种优秀框架 1.4 提供了分层开发下的完整技术解决方案 1.5 Java语言编写的开源框架&#xff0c;使用了多种设计模式 2. Spring的第一个程序 2.1 开发环境 2.2 环境搭建 2.3 编码测试 2.4 BeanFactory的UML类图…

什么是HTTP/2?

HTTP/2&#xff08;原名HTTP 2.0&#xff09;即超文本传输协议第二版&#xff0c;使用于万维网。HTTP/2主要基于SPDY协议&#xff0c;通过对HTTP头字段进行数据压缩、对数据传输采用多路复用和增加服务端推送等举措&#xff0c;来减少网络延迟&#xff0c;提高客户端的页面加载…