微信小程序怎么实现简单手写签名组件
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍了微信小程序怎么实现简单手写签名组件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序怎么实现简单手写签名组件文章都会有所收获,下面我们一起来看看吧
千家信息网最后更新 2025年11月07日微信小程序怎么实现简单手写签名组件一、思路
二、实现
1. 页面与样式
2. 初始化
3. 点击时
4. 签名时
这篇文章主要介绍了微信小程序怎么实现简单手写签名组件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序怎么实现简单手写签名组件文章都会有所收获,下面我们一起来看看吧。
需求:
可以实现用户在微信小程序上手写签名。
需要组件化。
效果

一、思路
在微信小程序中,我们使用canvas组件实现。将用户的输入想象成为一只笔。我们要画的签名是由很多点构成的。但是单纯的点是不能很好地构成线。点与点之间还要由线连接。下面是实现过程代码。
二、实现
1. 页面与样式
wxml
这里的canvas组件是最新的用法。
清空
wxss
.btnList{ width: 95%; margin:0 auto;}.handWriting{ background: #fff; width: 95%; height: 80vh; margin:0 auto}2. 初始化
由于是在自定义组件中使用,所以要注意获取canvas的时候的this指向问题。如果不调用SelectorQuery的In方法,那么就在自定义组件获取不到canvas,因为这个时候指向的父组件。
Component({ /** * 组件的初始数据 */ data: { canvasName:"#handWriting", ctx:"", canvasWidth:0, canvasHeight:0, startPoint:{ x:0, y:0, }, selectColor: "black", lineColor: "#1A1A1A", // 颜色 lineSize: 1.5, // 笔记倍数 radius:5,//画圆的半径 }, ready(){ let canvasName = this.data.canvasName; let query = wx.createSelectorQuery().in(this);//获取自定义组件的SelectQuery对象 query.select(canvasName) .fields({ node: true, size: true }) .exec((res) => { const canvas = res[0].node; const ctx = canvas.getContext("2d"); //获取设备像素比 const dpr = wx.getSystemInfoSync().pixelRatio; //缩放设置canvas画布大小,防止笔迹错位 canvas.width = res[0].width * dpr; canvas.height = res[0].height * dpr; ctx.scale(dpr, dpr); ctx.lineJoin="round"; this.setData({ctx}); }); query.select(".handCenter").boundingClientRect(rect => { console.log("rect", rect); this.setData({ canvasWidth:rect.width, canvasHeight:rect.height }); }).exec(); }, //省略以下代码......});3. 点击时
Component({ //省略以上代码... methods: { scaleStart(event){ if (event.type != "touchstart") return false; let currentPoint = { x: event.touches[0].x, y: event.touches[0].y } this.drawCircle(currentPoint); this.setData({startPoint:currentPoint}); }, drawCircle(point){//这里负责点 let ctx = this.data.ctx; ctx.beginPath(); ctx.fillStyle = this.data.lineColor; //笔迹粗细由圆的大小决定 ctx.arc(point.x, point.y, this.data.radius, 0 , 2 * Math.PI); ctx.fill(); ctx.closePath(); }, //省略以下代码... }})4. 签名时
Component({ //省略以上代码 methods:{ drawLine(sourcePoint, targetPoint){ let ctx = this.data.ctx; this.drawCircle(targetPoint); ctx.beginPath(); ctx.strokeStyle = this.data.lineColor; ctx.lineWidth = this.data.radius * 2;//这里乘2是因为线条的粗细要和圆的直径相等 ctx.moveTo(sourcePoint.x, sourcePoint.y); ctx.lineTo(targetPoint.x, targetPoint.y); ctx.stroke(); ctx.closePath(); }, clearCanvas(){//清空画布 let ctx = this.data.ctx; ctx.rect(0, 0, this.data.canvasWidth, this.data.canvasHeight); ctx.fillStyle = "#FFFFFF"; ctx.fill(); } }})关于"微信小程序怎么实现简单手写签名组件"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"微信小程序怎么实现简单手写签名组件"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
组件
程序
代码
知识
内容
大小
指向
时候
用户
画布
笔迹
篇文章
粗细
之间
价值
倍数
像素
半径
对象
思路
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发企业的研发成果
把控软件开发的各个流程
美团外卖网络技术
吴中区正规网络技术要多少钱
泰尔瑞亚服务器注册账号
B站出现服务器宕机事故 原因
java读取数据库表的名字
如何把控数据库安全
学生活动管理系统数据库
服务器安全组80端口没打开
用户管理工具连接服务器失败
c 做抢票软件开发
服务器每周一自动关机
db2数据库文件格式
服务器安全策略在那
中国最好的服务器是哪个
服务器管理基础
服务器接显卡
小型服务器价格
计算机网络技术上机题型
做数据库数据哪里搞
数据库表设计介绍
哪些行业需要软件开发
软件开发自动化部署
软件开发生鱼片模型
前端软件开发哪家可靠
学生活动管理系统数据库
一个服务器怎么开多个手游
数据库触发器
creo的服务器管理