微信小程序怎么实现简单手写签名组件
发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章主要介绍了微信小程序怎么实现简单手写签名组件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序怎么实现简单手写签名组件文章都会有所收获,下面我们一起来看看吧
千家信息网最后更新 2024年11月11日微信小程序怎么实现简单手写签名组件一、思路
二、实现
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安全错误
数据库的锁怎样保障安全
服务器 安装显卡
博兴物流竞价软件开发价格
小学网络安全防范常识
互联网招聘软件开发
新blue换数据库各种报错
浙江公安局网络安全总队
深圳市仟讯网络技术公司
软件开发发布流程
湖北网络安全技术提升网络安全
金铲铲之战所有服务器都进不去
长宁区工商软件开发问答知识
数据库安全离职员工
海南科技产业互联网有哪些
农发行国家网络安全周新闻
数据库软件验收标准
腾讯管家数据库
局域网数据库系统管理
湖南工业服务器云主机
宁海软件开发好吗
省市县mysql数据库
路由器显示服务器错误怎么办
科技互联网改变生活英语作文
http服务器架构
3g网络技术及其运营商
计算机与网络安全考研
罗布乐思推荐游戏服务器
菲律宾 博彩软件开发
软件开发环境大全
企业实时数据库厂家
天津云服务器租用大概多少钱