微信小程序怎么实现简单手写签名组件
发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,这篇文章主要介绍了微信小程序怎么实现简单手写签名组件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序怎么实现简单手写签名组件文章都会有所收获,下面我们一起来看看吧
千家信息网最后更新 2024年11月23日微信小程序怎么实现简单手写签名组件一、思路
二、实现
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安全错误
数据库的锁怎样保障安全
网络安全画报简单漂亮
加强社会网络安全意识教育
宁夏兴庆区软件开发费用
魅蓝3谷歌服务器
电脑如何安装到数据库
网络安全通报 重复通报
普通人如何考网络安全员
海南会计软件开发创新服务
网络安全班会怎么讲
你知道哪些网络安全防护技巧
数据库挖掘方向
碧空之歌和雷霆之击哪个服务器
投资5g网络安全三线蓝筹股
合肥软件开发能拿多少钱一个啊
保障网络安全意识反思
大专里的网络安全
国产化网络安全产品有哪些
国际服起床服务器pc版
网络安全功放竞赛题目
网络安全周在哪答题
皖事通社保查询显示服务器异常
需求不明确的软件开发模式
软件开发中SRS
读取微信数据库文件
江苏神威网络技术有限公司
如何从数据库读取数据
2020年银行网络安全
uni-app使用本地数据库
云服务器在哪个地方价格实惠
如何绕开服务器安全狗