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

  • 华为测量长度的软件在哪(华为测量长度的软件安装)

    华为测量长度的软件在哪(华为测量长度的软件安装)

  • 荣耀x10电池容量是多少毫安(荣耀x10电池容量多少毫安)

    荣耀x10电池容量是多少毫安(荣耀x10电池容量多少毫安)

  • 小米内容中心推送怎么关闭(小米内容中心app)

    小米内容中心推送怎么关闭(小米内容中心app)

  • 小米10超广角怎么用(小米超广角怎么打开)

    小米10超广角怎么用(小米超广角怎么打开)

  • 荣耀9x如何开启畅连通话(荣耀9x如何开启语音助手)

    荣耀9x如何开启畅连通话(荣耀9x如何开启语音助手)

  • windows在键盘哪个位置(windows在键盘上是哪个键)

    windows在键盘哪个位置(windows在键盘上是哪个键)

  • 竖屏是什么意思(什么是竖屏模式)

    竖屏是什么意思(什么是竖屏模式)

  • 段前20pt什么意思(段前段后20pt)

    段前20pt什么意思(段前段后20pt)

  • 手机微信突然说登录过期(手机微信突然说没有打开相机设置)

    手机微信突然说登录过期(手机微信突然说没有打开相机设置)

  • ksafe是什么文件夹(ksafe是什么文件可以删除吗)

    ksafe是什么文件夹(ksafe是什么文件可以删除吗)

  • 钉钉群管理员有什么权限(钉钉群管理员有移出权限吗)

    钉钉群管理员有什么权限(钉钉群管理员有移出权限吗)

  • qq如何更换密保手机号(qq如何更换密保手机号码)

    qq如何更换密保手机号(qq如何更换密保手机号码)

  • 华为p30后置摄像头玻璃碎了怎么办(华为p30后置摄像头像素)

    华为p30后置摄像头玻璃碎了怎么办(华为p30后置摄像头像素)

  • 拼多多删除自己的评价(拼多多删除自己的留言)

    拼多多删除自己的评价(拼多多删除自己的留言)

  • word文档怎么标注修改(word文档怎么标注重点)

    word文档怎么标注修改(word文档怎么标注重点)

  • 天猫垫付账号在哪里(天猫平台垫付会撤回吗)

    天猫垫付账号在哪里(天猫平台垫付会撤回吗)

  • 手机增值业务怎么取消(手机增值业务怎么开通)

    手机增值业务怎么取消(手机增值业务怎么开通)

  • 三星W20 5G手机屏幕多大(三星w2020手机屏多少钱)

    三星W20 5G手机屏幕多大(三星w2020手机屏多少钱)

  • 淘宝直播拉黑多久恢复(淘宝直播间被拉黑后进去是什么样子的)

    淘宝直播拉黑多久恢复(淘宝直播间被拉黑后进去是什么样子的)

  • oppoa9多少寸(oppoa9尺寸是多少厘米)

    oppoa9多少寸(oppoa9尺寸是多少厘米)

  • 快手家长控制模式是什么意思(快手家长控制模式全面升级为青少年模式)

    快手家长控制模式是什么意思(快手家长控制模式全面升级为青少年模式)

  • 为什么qq打卡不显示天数(为什么qq打卡不等级加速)

    为什么qq打卡不显示天数(为什么qq打卡不等级加速)

  • 相互保保险范围(相互保是保险吗)

    相互保保险范围(相互保是保险吗)

  • 小米9指纹解锁不灵敏(小米9指纹解锁方式)

    小米9指纹解锁不灵敏(小米9指纹解锁方式)

  • html 导入百度地图 网页中如何导入百度地图(html如何导入excel)

    html 导入百度地图 网页中如何导入百度地图(html如何导入excel)

  • 企业纳税人是什么
  • 超率累进税率定义
  • 房地产开发产品科目
  • 高新技术企业三级领域
  • 土地增值税计入固定资产清理
  • 过了纳税期没有申报
  • 出口退免税备案
  • 什么情况下征税
  • 现金日记账支出和收入表格怎么做
  • 出口没做免税申报怎样补税?
  • 物流 贷款
  • 航天金穗服务费抵扣
  • 企业购买劳保用品会计处理
  • 个人投资理财需要注意什么
  • 企业境外付款流程
  • 私人转公账可以吗
  • 公司为什么要成立工会委员会
  • 公司房产税如何计算器
  • 双倍余额折旧法
  • 四级主任科员是什么级别待遇
  • 资源税改革最新政策
  • 单位应当为职工创造有益于健康的环境和条件
  • 天猫公司不开银行卡吗
  • 一般纳税人如何计算企业所得税
  • 实习生短期意外保险能企业所得税前扣除吗?
  • 基于php开发
  • php中substr_replace
  • sixtypopsix.exe - sixtypopsix是什么进程 有什么用
  • 原材料当做废品怎么做
  • php require include
  • 年末一般纳税人税率表
  • 最快的网络传输速率
  • 一个完整的php文件有哪些元素组成
  • 摊余成本计量的金融资产若溢价购买小于
  • php限制接口调用次数
  • vue动态绑定背景图
  • vue路由跳转的三种方法
  • 解决什么情况
  • phpcms视频教程
  • 如何修改php.ini
  • 豪华车消费税的计算公式
  • 管家婆软件出库入库如何用
  • 加工费能直接抵税吗
  • mongodb从入门到商业实战
  • 记 vue-cli-plugin-dll 使用,优化vue-cli项目构建打包速度
  • 广播影视服务税率2023
  • 材料暂估成本的账务处理
  • 银行代发工资流程
  • sqlserver修改数据库密码
  • 小微企业全年营业额不能超过多少
  • 小微企业免税销售额和其他免税销售额的区别
  • 应收账款在贷方为负数表示什么
  • 应付账款已付款应该怎样记账
  • 未认证未抵扣的进项税
  • 补交以前年度企业所得税怎么入账
  • 通信费属于哪个会计科目
  • 公司发放节日礼品
  • 企业与股东之间的交易是否会影响企业财务目标的实现
  • 货币资金核算内容
  • win7提示oxcooooo98
  • xp系统cad32位用哪个版本
  • xp系统 控制面板
  • xp 修复
  • mac蓝牙怎么连接耳机
  • WIN10系统中断
  • wingate.exe - wingate是什么进程
  • win8.1开始界面
  • win7运行老游戏方法
  • win10系统自带浏览器在哪里
  • win8系统关机键找不见
  • opengl帧缓冲
  • unity2020商店
  • js动态生成页面
  • linux 加法命令
  • 分享一下相亲时碰见过哪些奇葩事
  • jquery实现div左右移动
  • linux python gui
  • python中编写程序
  • 税务注销核对发票怎么办
  • 成都网上税务局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设