位置: IT常识 - 正文

用uniapp实现微信小程序的电子签名效果(uniapp仿微信)

编辑:rootadmin
用uniapp实现微信小程序的电子签名效果

推荐整理分享用uniapp实现微信小程序的电子签名效果(uniapp仿微信),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:uniapp接入微信登录,uniapp调用微信api,uniapp打开微信,uniapp wxs,uniapp打开微信,uniapp wxs,uniapp调用微信api,uniapp打开微信,内容如对您有帮助,希望把文章链接给更多的朋友!

✅作者简介:大家好我是瓜子三百克,励志成为全栈工程师的一枚程序猿,也是喜欢在学习和开发中记录笔记的小白博主! 📃个人主页:瓜子三百克的主页 🔥系列专栏:uniapp前端 💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞

让我们一起卷起来吧!!!

画布可以做很多事情,比如可以绘图,也可以做海报。在这里只是想拿它来的实现亲笔签名,开启不一样的亲笔签名姿势。

开发框架:uniapp 开发语言:vue2 展示平台:微信小程序(实际可以兼容多个平台)

用uniapp实现微信小程序的电子签名效果(uniapp仿微信)

标签和样式没什么好说的,这里绘制了简单的页面,见下图:

1、标签和样式<template><view class="page-content"><view class="form"><view class="form-content"><canvas class="form-content__canvas" canvas-id="canvas_sign" @touchstart="touchstart"@touchmove="touchmove" @touchend="touchend" disable-scroll="true"></canvas></view><view class="form-footer"><button class="form-footer__reset" @click="autographClick(1)">重置</button><button class="form-footer__save" @click="autographClick(2)">保存</button><button class="form-footer__preview" @click="autographClick(3)">预览</button></view></view></view></template><style lang="scss" scoped>/** 横屏后的适配方案* @param $rpx为需要转换的字号* @参考 https://blog.csdn.net/sdfsfsdscd/article/details/91375066**/@function tovmin($rpx) {@return #{$rpx * 100 / 750}vmin;}.page-content {width: 100vw;height: 100vh;.form {display: flex;flex-direction: column;width: 100%;height: 100%;.form-content {width: 100%;height: 100%;&__canvas {height: calc(100vh - tovmin(20) - tovmin(120) - constant(safe-area-inset-bottom));height: calc(100vh - tovmin(20) - tovmin(120) - env(safe-area-inset-bottom));width: 100vw;}}.form-footer {padding-top: tovmin(20);height: calc(tovmin(120) + constant(safe-area-inset-bottom));height: calc(tovmin(120) + env(safe-area-inset-bottom));width: 100%;display: flex;flex-direction: row;background: #FFFFFF;box-shadow: 0 tovmin(4) tovmin(20) tovmin(2) rgba(183, 183, 183, 0.20);button {width: 20vw;height: tovmin(88);line-height: tovmin(88);border-radius: tovmin(48);text-align: center;font-size: tovmin(36);font-weight: bold;}button::after {border: none;}&__reset {color: #008AFE;border: tovmin(1) solid #008AFE;}&__save {background-image: linear-gradient(135deg, #1BC5FF 0%, #008AFE 100%);}&__preview {color: #008AFE;border: tovmin(1) solid #008AFE;}}}}</style>2、横屏切换

到【pages.json】文件中添加横屏切换配置 注意:不同的平台横屏切换将有所不一样。这里是针对微信小程序的横屏适配

{"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages{"path": "pages/index/index","style": {"navigationBarTitleText": "亲笔签名",//导航栏标题"pageOrientation": "landscape",//切换横屏"enablePullDownRefresh": false,//关闭下拉刷新"disableScroll": true // 整体页面禁止上下滑动}}],"globalStyle": {"navigationBarTextStyle": "black","navigationBarBackgroundColor": "#FFFFFF","backgroundColor": "#f5f5f5","navigationStyle": "default", // default/custom。custom即取消默认的原生导航栏"mp-alipay": {"transparentTitle": "always","titlePenetrate": "YES"}}}

然后是绘制逻辑处理,注意点在代码中备注:

3、绘图3.1、初始化数据会吧?data() {return {canvasCtx: '', //绘图图像points: [], //路径点集合hasSign: false,isInit: false,}},onLoad(query) {this.canvasCtx = uni.createCanvasContext('canvas_sign', this) //创建绘图对象//设置画笔样式this.canvasCtx.lineWidth = 6// 设置线条的端点样式this.canvasCtx.lineCap = 'round'// 设置线条的交点样式this.canvasCtx.lineJoin = 'round'},3.2、触摸开始时获取起点,会吧?touchstart: function(e) {if (!this.isInit) {this.isInit = truethis.autographClick(1);}let startX = e.changedTouches[0].xlet startY = e.changedTouches[0].ylet startPoint = {X: startX,Y: startY}this.points.push(startPoint)//每次触摸开始,开启新的路径this.canvasCtx.beginPath()},3.3、触摸移动获取路径点,会吧?touchmove: function(e) {let moveX = e.changedTouches[0].xlet moveY = e.changedTouches[0].ylet movePoint = {X: moveX,Y: moveY}this.points.push(movePoint) //存点let len = this.points.lengthif (len >= 2) {this.draw() //绘制路径}},3.4、触摸结束,将未绘制的点清空防止对后续路径产生干扰,简单吧?touchend: function() {this.points = []this.canvasCtx.draw(true)},3.5、绘制笔迹,没得问题吧?

这里有几个注意点:

1.为保证笔迹实时显示,必须在移动的同时绘制笔迹 2.为保证笔迹连续,每次从路径集合中区两个点作为起点(moveTo)和终点(lineTo) 3.将上一次的终点作为下一次绘制的起点(即清除第一个点)

draw: function() {let point1 = this.points[0]let point2 = this.points[1]this.points.shift()this.canvasCtx.moveTo(point1.X, point1.Y)this.canvasCtx.lineTo(point2.X, point2.Y)this.canvasCtx.stroke()this.canvasCtx.draw(true)this.hasSign = true},4、扫尾处理

上面的实现了,说明就可以签下你大名了。这里扫尾工作(按钮点击功能实现)只是景上添花。根据实际情况不一定要做。

<script>export default {methods: {// 底部按钮点击操作autographClick(type) {let that = thisif (type === 1) {//清空画布this.hasSign = falseuni.getSystemInfo({success: function(res) {let canvas = uni.createSelectorQuery().select('.form-content__canvas')canvas.boundingClientRect().exec(function(data) {console.log('canvas', data)console.log('canvas wh:' + data[0].width + 'X' + data[0].height)let canvasw = Math.ceil(data[0].width)let canvash = Math.ceil(data[0].height)that.canvasCtx.fillStyle = '#fff'that.canvasCtx.fillRect(0, 0, canvasw, canvash)that.canvasCtx.draw(true)})}})} else {if (!this.hasSign) {uni.showToast({title: '签名不能为空',icon: 'none',duration: 2000})return}uni.getSystemInfo({success: function(res) {let canvas = uni.createSelectorQuery().select('.form-content__canvas')canvas.boundingClientRect().exec(function(data) {console.log('canvas saveSign:', data[0].width + 'X' + data[0].height)let canvasw = Math.ceil(data[0].width)let canvash = Math.ceil(data[0].height)uni.canvasToTempFilePath({destWidth: canvasw,destHeight: canvash,fileType: 'jpg',canvasId: 'canvas_sign',success: function(res) {console.log('图片导出成功:', res)let path = res.tempFilePath// 保存图片if (type === 2) {that.uploadPic(path)} else if (type === 3) {// 预览图片uni.previewImage({urls: [path]})}},fail: (err) => {// http://tmp/2LVQyvzddk2R820a9009dff43323d8e7fc9ef7a8d076.jpgconsole.log('图片导出失败:', err)}})})}})}},// 图片上传处理uploadPic(tempFile) {// 1、将本地图片上传到服务器(假装是七牛云服务器)// 2、将七牛云返回的链接,上传到我们的服务器平台console.log("------:", tempFile);uni.showLoading({title: '正在上传中...'})setTimeout(() => {uni.showToast({title: '假装签名上传成功',duration: 2000,icon: 'none'});}, 1000);}}}</script>

demo地址: 1、CSDN资源库地址:https://download.csdn.net/download/weixin_38633659/85343244 2、gitee地址:https://gitee.com/chenzm_186/autograph-mini.git

**🏆结束语🏆 **

🌹🌹:以上功能已全部实现,那么你想已怎么样的姿势开启你的亲笔签名模式呢?欢迎留言评论! 🌹🌹:最后如果觉得我写的文章对您有帮助的话,欢迎点赞✌,收藏✌,加关注✌哦,谢谢谢谢!!

本文链接地址:https://www.jiuchutong.com/zhishi/287184.html 转载请保留说明!

上一篇:最贵的iPad配件是什么(最贵的苹果平板)

下一篇:【YOLOV5-6.x讲解】YOLO5.0VS6.0版本对比+模型设计(yolov5解析)

  • 让你的网站拥有更多访问量的妙招(让你的网站拥有更多权益)

    让你的网站拥有更多访问量的妙招(让你的网站拥有更多权益)

  • 怎样进入抖音直播间(怎样进入抖音直播间不显示名字)

    怎样进入抖音直播间(怎样进入抖音直播间不显示名字)

  • vivo桌面图标怎么设置(vivo桌面图标怎么改成自己喜欢的图案)

    vivo桌面图标怎么设置(vivo桌面图标怎么改成自己喜欢的图案)

  • 电视机无线网络连接失败原因(电视机无线网络开关打不开)

    电视机无线网络连接失败原因(电视机无线网络开关打不开)

  • 微信怎么能更改微信号(微信怎么能更改好友头像)

    微信怎么能更改微信号(微信怎么能更改好友头像)

  • wps表格如何查找指定内容(wps表格如何查找替换)

    wps表格如何查找指定内容(wps表格如何查找替换)

  • 苹果x触摸屏幕触摸不灵怎么调(苹果x触摸屏幕就亮怎样设置)

    苹果x触摸屏幕触摸不灵怎么调(苹果x触摸屏幕就亮怎样设置)

  • ipad壁纸显示不全(ipad壁纸不合适怎么办)

    ipad壁纸显示不全(ipad壁纸不合适怎么办)

  • 钉钉直播最小化算时间吗(钉钉直播最小化计入时长吗)

    钉钉直播最小化算时间吗(钉钉直播最小化计入时长吗)

  • 全民k歌屏蔽和拉黑是一样吗(全民k歌 屏蔽)

    全民k歌屏蔽和拉黑是一样吗(全民k歌 屏蔽)

  • ch/a是什么版本(mggu3ch/a是什么版本)

    ch/a是什么版本(mggu3ch/a是什么版本)

  • 小米手环监管什么意思(小米手环进入监管模式怎么办)

    小米手环监管什么意思(小米手环进入监管模式怎么办)

  • 微信通话铃声不响(微信通话铃声不能用本地吗)

    微信通话铃声不响(微信通话铃声不能用本地吗)

  • 港版iphone11和国行的区别(港版苹果11比国行便宜多少)

    港版iphone11和国行的区别(港版苹果11比国行便宜多少)

  • 华为手机p20双卡双待吗(华为p20手机双卡双待怎么用)

    华为手机p20双卡双待吗(华为p20手机双卡双待怎么用)

  • 苹果id改密码了别人还能用吗(苹果ID改密码了另一台手机还可以用吗)

    苹果id改密码了别人还能用吗(苹果ID改密码了另一台手机还可以用吗)

  • 荣耀哪个系列是旗舰(荣耀哪个系列是双扬声器)

    荣耀哪个系列是旗舰(荣耀哪个系列是双扬声器)

  • qq上的基友关系是什么意思(qq里的基友关系在哪里)

    qq上的基友关系是什么意思(qq里的基友关系在哪里)

  • 荣耀20s左上角hd什么意思(荣耀20屏幕上的hd标志是什么)

    荣耀20s左上角hd什么意思(荣耀20屏幕上的hd标志是什么)

  • 微信缓存清理几个小时(微信缓存清理要多久)

    微信缓存清理几个小时(微信缓存清理要多久)

  • 密封线在word怎么编辑(word密封线如何设置)

    密封线在word怎么编辑(word密封线如何设置)

  • 考研取消报名会退钱吗(考研取消报名会不会退钱)

    考研取消报名会退钱吗(考研取消报名会不会退钱)

  • pd2.0和pd3.0的区别(pd3.0 2.0区别)

    pd2.0和pd3.0的区别(pd3.0 2.0区别)

  • SOUL多久可以点亮全部字母(soul的多久可以点亮一颗心)

    SOUL多久可以点亮全部字母(soul的多久可以点亮一颗心)

  • 快手通讯好友如何删(快手通讯好友如何删除)

    快手通讯好友如何删(快手通讯好友如何删除)

  • win10取消登陆密码设置方法(win10取消登陆密码)

    win10取消登陆密码设置方法(win10取消登陆密码)

  • windows modules installer worker是什么? 可以删除吗?(windows modules installer worker怎么禁用)

    windows modules installer worker是什么? 可以删除吗?(windows modules installer worker怎么禁用)

  • 月收入10万以下免税哪些企业适用
  • 税款滞纳金和利息
  • 委托加工的增值税纳税人是谁
  • 人工费怎么入账
  • 职工的补助金需交税吗
  • 递延所得税资产计算公式
  • 房产税存在往期滞纳金吗
  • 以房屋抵顶的工程叫什么
  • 发票丢失说明怎么填写
  • 电子承兑超期一天怎么兑付
  • 呆账的处理
  • 房租费没有发票怎么做账务处理
  • 电费做其他业务收入的账务处理怎么做?
  • 第三方代缴社保算工龄吗
  • 挂靠工程的所得税账务处理怎么做?
  • 公司收到股东的投资款以后怎么处理
  • 办理完税务手续是否还需要报税?
  • 施工工人个税怎么计算?
  • 农产品销售发票能否抵扣进项税?
  • 跨年补交企业所得税
  • 应交税费未交增值税是什么意思
  • 维修车间人员的工作总结
  • 增值税发票金额是含税还是不含税价
  • windows聚焦无法显示 为灰色
  • 鸿蒙智能充电模式怎么用
  • 如何玩faceit
  • 冲减坏账准备和计提坏账准备
  • 金融工具减值会影响什么
  • 计算机指令用来做什么
  • 房产税具体内容
  • 使用vue搭建项目
  • 财务会计制度备案
  • php artisan key:generate
  • win10系统安装配置
  • linux+php
  • php连接数据库mysql做登录页
  • 汽车4s店一般会摆放什么小零食
  • node.js教程详细
  • Python web开发基础教程的心得
  • ai与自动化有什么区别
  • 工资的会计账务处理
  • 小餐饮需要交什么税
  • 员工买机票公司会知道吗
  • 公允价值变动收益借方是增加还是减少
  • 如何计提所得税费用科目
  • 员工买材料报销分录
  • js方案
  • html怎么样
  • 循环logo
  • 费用按照归属的不同可分为
  • About BitRock
  • 企业所得税里面的利润总额怎么算
  • 上月结转余额怎么做会计分录
  • 公允价值进行会计计量
  • 会计里的管理费用包括什么
  • 行政单位拨出经费的规定
  • 路桥公司会计核算办法
  • 收到水电费发票要交印花税吗
  • 预付账款的账务处理过程
  • 做无票收入如何报税
  • 讲课费需要提供发票吗
  • 银行承兑汇票如何背书转让
  • 获得sql数据库信息的方法
  • centos 安装chia
  • be备份linux系统
  • Cocos2d-JS中JavaScript继承
  • 在vs中搭建opengl环境
  • 虚拟内存系统盘
  • ie所有版本
  • [置顶]游戏名 TentacleLocker
  • jquery.form
  • javascript学习指南
  • 基于mvc设计模型的框架
  • jquery提交
  • 青岛税务局局长是什么级别?
  • 河南出名歌手
  • 残疾人在国企有补贴吗
  • 北京地税app
  • 企业资质怎么报审
  • 工商注册app是不是在手机上可以完全操作
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设