位置: IT常识 - 正文

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

发布时间:2024-01-05
用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解析)

  • 华为电脑怎么看电脑型号(华为电脑怎么看配置)

    华为电脑怎么看电脑型号(华为电脑怎么看配置)

  • 抖音怎么设置自动播放(抖音怎么设置自动播放下一个)

    抖音怎么设置自动播放(抖音怎么设置自动播放下一个)

  • iqoou1是不是5G手机(iqoou1支持5g吗)

    iqoou1是不是5G手机(iqoou1支持5g吗)

  • 微信右上角三个点不见了(微信右上角三个点)

    微信右上角三个点不见了(微信右上角三个点)

  • 抖音本地文件夹名称(斗音文件夹)

    抖音本地文件夹名称(斗音文件夹)

  • 华为手机的智能遥控器在哪里(华为手机的智能推荐怎么关闭)

    华为手机的智能遥控器在哪里(华为手机的智能推荐怎么关闭)

  • 怎么知道对方拒接电话(怎么知道对方拒绝添加好友)

    怎么知道对方拒接电话(怎么知道对方拒绝添加好友)

  • 拼多多月卡时间怎么计算(拼多多月卡时间是已开启算的吗)

    拼多多月卡时间怎么计算(拼多多月卡时间是已开启算的吗)

  • iphone的优化电池充电要开吗(iphone优化电池充电)

    iphone的优化电池充电要开吗(iphone优化电池充电)

  • 苹果和苹果发信息免费的吗(苹果和苹果发信息是绿色的)

    苹果和苹果发信息免费的吗(苹果和苹果发信息是绿色的)

  • iphone11处理器是a几(iphone11处理器是a几怎么看)

    iphone11处理器是a几(iphone11处理器是a几怎么看)

  • 情侣空间网络繁忙是什么问题(情侣空间显示网络异常)

    情侣空间网络繁忙是什么问题(情侣空间显示网络异常)

  • 苹果卡槽弹不出来(苹果卡槽弹不出怎么办)

    苹果卡槽弹不出来(苹果卡槽弹不出怎么办)

  • fx9800p相当于英特尔i几(fx9800相当于英特尔i几)

    fx9800p相当于英特尔i几(fx9800相当于英特尔i几)

  • c语言编译后生成什么文件(c语言编译后生成什么程序连接后生成什么程序)

    c语言编译后生成什么文件(c语言编译后生成什么程序连接后生成什么程序)

  • 银河奇异果和爱奇艺有什么区别(银河奇异果和爱奇艺会员互通吗)

    银河奇异果和爱奇艺有什么区别(银河奇异果和爱奇艺会员互通吗)

  • 微信登录抖音未获得权限(微信登录抖音未获得权限怎么办)

    微信登录抖音未获得权限(微信登录抖音未获得权限怎么办)

  • 微信怎么开通扫脸支付(微信怎么开通扫码收款,扫对方付款码的一种)

    微信怎么开通扫脸支付(微信怎么开通扫码收款,扫对方付款码的一种)

  • b站怎么靠uid查人(b站怎么用uid查人)

    b站怎么靠uid查人(b站怎么用uid查人)

  • 服务器是什么系统(服务器是?)

    服务器是什么系统(服务器是?)

  • 面容id坏了能修吗(面容id坏了能卖多少钱)

    面容id坏了能修吗(面容id坏了能卖多少钱)

  • 闲鱼实人认证总是失败(闲鱼实人认证好慢)

    闲鱼实人认证总是失败(闲鱼实人认证好慢)

  • 苹果抹机是什么意思(苹果抹机对手机有影响吗)

    苹果抹机是什么意思(苹果抹机对手机有影响吗)

  • 苹果xr自动关机怎么回事(苹果xr自动关机了,怎么也打不开了)

    苹果xr自动关机怎么回事(苹果xr自动关机了,怎么也打不开了)

  • 哪些企业可以出2.2证书
  • 偶然所得个人所得税会计分录
  • 返岗补贴怎么办理
  • 交易性金融资产有哪些
  • 政府补助需要交哪些税
  • 期末未缴税额为负数怎么办
  • 新企业需要结转增值税吗
  • 房地产开发企业会计科目
  • 购置新建商品房,自房屋交付使用
  • 预缴增值税怎么填表
  • 土地增值税预缴政策
  • 支付的管理费用可以抵税吗
  • 工程款材料费票怎么开?
  • 写字楼出租可以给租户注册吗
  • 货款和发票金额不符
  • 企业去年
  • 补偿金满一年不满一年半
  • 当月工资补扣个税吗
  • 收到政府征地补偿款
  • 理财代持有法律效力吗
  • 进口货物有进项税吗
  • 消耗性生物资产是指什么
  • 小规模企业低值易耗品摊销方法
  • 外购已税化妆品生产的护肤护发品
  • 固定资产可以一次折旧完吗
  • linux系统查询mac地址命令
  • php怎么输出汉字
  • 系统盘怎么重装系统win7
  • mac怎么共享文件
  • 如何才能显示效果更好
  • movie maker是什么软件
  • pavprsrv.exe - pavprsrv是什么进程 有什么用
  • pascl32.exe - pascl32是什么进程 有什么用
  • 支付报刊杂志费
  • 所得税时间性差异与暂时性差异
  • php7安装教程详解
  • Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流
  • 公司向股东借款多久必须归还
  • 发票多久过期不能开
  • 国税局发票打印软件下载
  • 公司购垃圾袋怎么做账
  • php获取表单数据的方法和区别
  • docker部署webdav
  • 土地增值税的扣除项目金额怎么算
  • 弱电工程计入什么费用
  • 发票项目要求
  • python怎么用
  • python怎么写文字
  • python idle有什么用
  • 现金发放工资会计科目怎么写
  • 怎样进行制造费用的归集
  • sql中判断函数
  • 计提工资是计提哪个月的
  • 一次开票分期确认收入
  • 应收账款期末余额为负数表示什么
  • 出差开会总结怎么写
  • 无形资产减值损失计入管理费用
  • 如何开展服务
  • 企业租赁厂区的管理制度
  • 品种法案例分析
  • 库存数据不准确
  • 法定盈余公积是什么
  • 个体工商户的建筑劳务是否需要资质
  • 核算管理工作
  • sql 常用语录
  • Linux系统中uniq命令的基本使用教程
  • centos7 eth
  • linux查看组的信息
  • win10系统组策略怎么打开
  • shader开发实战
  • cocos2djs教程
  • [置顶]星陨计划
  • 详解九章算法
  • python3解析json
  • 猫猫的娱乐
  • js的文件操作
  • python web框架2023
  • 公司跨区迁移税务查账严吗
  • 广东省税务总局局长叫什么名
  • 马达加斯加秒懂百科
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号