位置: 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解析)

  • 培养数据思维,从每天的各种数据报表开始(培养数据思维的方式有哪些)

    培养数据思维,从每天的各种数据报表开始(培养数据思维的方式有哪些)

  • 中国移动摄像头怎么连接手机(中国移动摄像头APP)

    中国移动摄像头怎么连接手机(中国移动摄像头APP)

  • 电脑QQ怎么查自己被多少人特别关心(电脑qq怎么查自己的信息)

    电脑QQ怎么查自己被多少人特别关心(电脑qq怎么查自己的信息)

  • QQ群相册在哪里(qq群相册在哪里找出来)

    QQ群相册在哪里(qq群相册在哪里找出来)

  • 小米8关机键失灵(小米8关机键失灵怎么关机)

    小米8关机键失灵(小米8关机键失灵怎么关机)

  • 9v电池是几号电池(9v电池是干嘛用的)

    9v电池是几号电池(9v电池是干嘛用的)

  • delete和backspace区别(简述delete与 backspace的区别?)

    delete和backspace区别(简述delete与 backspace的区别?)

  • 腾讯会议不支持平板吗(腾讯会议不支持华为平板吗)

    腾讯会议不支持平板吗(腾讯会议不支持华为平板吗)

  • 抖音合拍对方有提醒吗(抖音合拍对方有声音吗)

    抖音合拍对方有提醒吗(抖音合拍对方有声音吗)

  • 苹果电脑读不出u盘(苹果电脑读不出tf卡)

    苹果电脑读不出u盘(苹果电脑读不出tf卡)

  • 苹果11手机尺寸(苹果11手机尺寸多大)

    苹果11手机尺寸(苹果11手机尺寸多大)

  • root设备什么意思(设备root权限)

    root设备什么意思(设备root权限)

  • word让部分文字竖着

    word让部分文字竖着

  • oppo o-free是什么应用(oppoecno free)

    oppo o-free是什么应用(oppoecno free)

  • html 怎么插入链接(html中链接怎么写)

    html 怎么插入链接(html中链接怎么写)

  • 快手怎么隐藏长腿瘦身特效(快手怎么隐藏视频教程)

    快手怎么隐藏长腿瘦身特效(快手怎么隐藏视频教程)

  • 个体户如何申请微信公众号(个体户如何申请电子发票的流程图)

    个体户如何申请微信公众号(个体户如何申请电子发票的流程图)

  • 爱剪辑怎么加片头片尾(爱剪辑怎么加片头字幕教程)

    爱剪辑怎么加片头片尾(爱剪辑怎么加片头字幕教程)

  • 抖音直播怎么关弹幕和礼物(抖音直播怎么关静音)

    抖音直播怎么关弹幕和礼物(抖音直播怎么关静音)

  • 淘宝电子凭证开通原因(淘宝电子凭证是干嘛的)

    淘宝电子凭证开通原因(淘宝电子凭证是干嘛的)

  • oppoa3有nfc功能吗(oppoa33有nfc功能吗)

    oppoa3有nfc功能吗(oppoa33有nfc功能吗)

  • 音乐视频是怎么制作(音乐视频是怎么弄的)

    音乐视频是怎么制作(音乐视频是怎么弄的)

  • 怎么激活手机隐藏电量(怎么激活手机隐藏电量红米)

    怎么激活手机隐藏电量(怎么激活手机隐藏电量红米)

  • 苹果8怎么清理系统内存(苹果8怎么清理运行中的软件)

    苹果8怎么清理系统内存(苹果8怎么清理运行中的软件)

  • 爱奇艺客户端播放视频显示缓冲(爱奇艺客户端播放卡顿)

    爱奇艺客户端播放视频显示缓冲(爱奇艺客户端播放卡顿)

  • Win10系统电脑电源已接通未充电是怎么回事?(windows10我得电脑)

    Win10系统电脑电源已接通未充电是怎么回事?(windows10我得电脑)

  • 解决Element-ui的el-table出现的表格错位问题(element-ui dialog)

    解决Element-ui的el-table出现的表格错位问题(element-ui dialog)

  • 培训个人所得税计算
  • 固定资产更新改造资本化条件
  • 贴现收到的钱计入什么会计科目
  • 新政府会计制度衔接预算会计需做好的账目清理工作有
  • 企业进行业务预算的编制技巧
  • 经济纠纷引发的刑事案件
  • 应收账款无法收回会计分录
  • 本月无凭证需要结转吗
  • 支付宝已经支付的钱怎么退回来
  • 公司购买工装计入什么费用
  • 印刷配件有哪些
  • 车间报废产品改善方式
  • 购货方非增值税一般纳税人
  • 受托加工费的成本都有什么
  • 董事费条款
  • 公司团建活动奖状模板
  • 企业员工奖励款怎么做账
  • 增值税暂估
  • 汇算所得税中“以前年度多缴的所得税额在本年抵减额”怎么填 ?
  • 会议费税前扣除标准2021
  • 现金流量表右边
  • 事业单位研发支出资本化
  • 金融企业贷款利率
  • 高新企业境外所得缴纳企业所得税税率为多少
  • 公司帐上欠了股东很多钱有何税务风险?
  • 开业好不好
  • 消费税如何避税计算
  • 自产自用设备税务处理
  • kb5001028补丁
  • 已收款未发货会计分录
  • 华为手机开热点后wlan自动关闭
  • 转出未交增值税借方余额表示什么
  • 原材料和固定资产入账价值的计算
  • 贷款发生减值
  • 秘鲁亚马逊木业有限公司招聘
  • php写木马
  • php中自定义常量的函数是
  • 贝纳克波斯图干红葡萄酒
  • phpsql防注入代码
  • thinkphp框架结构
  • web前端面试题2021及答案
  • 关税计入纳税总额么
  • wordpress整站备份
  • 预收账款收了没
  • phpcms文档
  • 土地给人家种了几十年还能要回来吗
  • 现金付款凭证是发票吗
  • 商场收取租金如何入账
  • 增值税进项发票勾选认证流程
  • 事业单位以固定工资为准
  • 采用分期付款方式的会计分录
  • 外购材料并提供建筑服务
  • 新税法实施后以前的条例规章作废吗
  • 消防公司会计分录
  • 企业购买的结构性存款怎样做账
  • 以前年度损益调整借贷方向
  • 现金支出业务的流程步骤包括
  • mysql深入理解
  • navicat远程连接oracle
  • 电脑安装win8系统
  • windows8正版
  • ubuntu16.04火狐打不开网页
  • linux服务器宕机排查
  • win7装完系统我的电脑在哪
  • rpm软件安装命令
  • linux计划任务执行脚本
  • 原生js添加css样式
  • javascript访问用户cookie
  • iframe移动端自适应
  • JavaScript中的变量名不区分大小写
  • javascript ES6 新增了let命令使用介绍
  • angular.js
  • js的变量
  • Python Sqlite3以字典形式返回查询结果的实现方法
  • javascript获取数据
  • 电子税务局打印发票提示本机未检测到
  • 灵活就业登记审核查询
  • 地税局一般几点下班
  • 契税的征收机关是哪里
  • 城市维护建设税的计税依据
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设