微信小程序怎么实现简单手写签名组件
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍了微信小程序怎么实现简单手写签名组件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序怎么实现简单手写签名组件文章都会有所收获,下面我们一起来看看吧
千家信息网最后更新 2026年11月01日微信小程序怎么实现简单手写签名组件一、思路
二、实现
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安全错误
数据库的锁怎样保障安全
保险科技 互联网保险
科技互联网企业
互联网金融 科技
互联网金融 金融科技
互联网 的科技创新
成都互联网科技公司
百单互联网科技有限公司
互联网科技公司有哪些
上海亿帐通互联网科技
居家互联网科技有限公司
西藏七维空间互联网科技有限公司
互联网系的金融科技公司
崇明区互联网教育科技售后服务
河南住房之家互联网科技
晋城互联网科技
工业互联网等科技实现智能化赋能
烟台灵鸽互联网科技有限公司
广州千川互联网科技有限公司
风投北京互联网科技
互联网科技品牌
耶加雪菲
金诺互联网科技
互联网最新的科技有限公司
朗涯互联网科技
彤创互联网科技有限公司
赶超互联网科技 微信多开
高科技互联网发展前景如何
科技互联网行业投资研究
科技和互联网行业的特点
数字互联网科技有限公司