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

  • 360随身wifi win7系统用不了(360随身wifi 2代)(360随身wifi win7用不了)

    360随身wifi win7系统用不了(360随身wifi 2代)(360随身wifi win7用不了)

  • iqoo8prodc调光在哪里(iqoo8pro 调光)

    iqoo8prodc调光在哪里(iqoo8pro 调光)

  • 腾讯微信会员怎么查看登录设备(腾讯微信会员怎么分享二维码登录)

    腾讯微信会员怎么查看登录设备(腾讯微信会员怎么分享二维码登录)

  • 华为平板在哪里看型号和尺寸(华为平板在哪里插卡)

    华为平板在哪里看型号和尺寸(华为平板在哪里插卡)

  • 华为智慧屏怎么投屏(华为智慧屏怎么安装第三方软件)

    华为智慧屏怎么投屏(华为智慧屏怎么安装第三方软件)

  • 华为保存密码在哪儿(华为手机保存密码的地方)

    华为保存密码在哪儿(华为手机保存密码的地方)

  • 苹果7硬重启(苹果硬重启白屏)

    苹果7硬重启(苹果硬重启白屏)

  • 腾讯会议操作过于频繁请稍后再试(腾讯会议操作过于频繁登录不了)

    腾讯会议操作过于频繁请稍后再试(腾讯会议操作过于频繁登录不了)

  • 华为的otg功能在哪里(华为的OTG功能在哪)

    华为的otg功能在哪里(华为的OTG功能在哪)

  • d盘根目录是什么意思(d盘根目录下创建文件夹)

    d盘根目录是什么意思(d盘根目录下创建文件夹)

  • 用户可以通过哪些方式找到想要购买的商品(用户可以通过哪些路径完成对微博会员的购买)

    用户可以通过哪些方式找到想要购买的商品(用户可以通过哪些路径完成对微博会员的购买)

  • 苹果拉黑电话后别人打进来是什么语音(苹果拉黑电话后短信是否可以正常收到)

    苹果拉黑电话后别人打进来是什么语音(苹果拉黑电话后短信是否可以正常收到)

  • 拼多多gmv什么意思(拼多多gmv计算公式)

    拼多多gmv什么意思(拼多多gmv计算公式)

  • 资源管理器中不能对文件进行什么操作(资源管理器中不能按什么方式排列图标)

    资源管理器中不能对文件进行什么操作(资源管理器中不能按什么方式排列图标)

  • 爱奇艺下载电视剧怎么下载(爱奇艺下载电视剧怎么传给别人)

    爱奇艺下载电视剧怎么下载(爱奇艺下载电视剧怎么传给别人)

  • 无线路由器上的reset是什么意思(无线路由器上的光信号闪红灯怎么办)

    无线路由器上的reset是什么意思(无线路由器上的光信号闪红灯怎么办)

  • 华为kiwtl00是什么手机(kiwul00华为是什么型号)

    华为kiwtl00是什么手机(kiwul00华为是什么型号)

  • 手机来电图片怎么设置(手机来电图片怎么变大)

    手机来电图片怎么设置(手机来电图片怎么变大)

  • 购物津贴在哪儿领(购物津贴怎么用举个例子)

    购物津贴在哪儿领(购物津贴怎么用举个例子)

  • 苹果远程管理怎么解除(苹果远程管理怎么登录)

    苹果远程管理怎么解除(苹果远程管理怎么登录)

  • 银联可信服务安全组件是什么(银联可信服务安全组件是什么东西)

    银联可信服务安全组件是什么(银联可信服务安全组件是什么东西)

  • 华为mate20熄屏显示时间设置

    华为mate20熄屏显示时间设置

  • 中型企业的标准是什么 划分标准
  • 以前年度免减的税怎么算
  • 普票不能抵扣要坐在帐里吗
  • 固定资产摊余成本例题
  • 餐饮流水账表格excel
  • 公司银行未开户税务也没开需要做工商年报吗
  • 未使用固定资产计提折旧计入
  • 其他应收款有哪些情况
  • 服务行业印花税税率
  • 政府补助应计入
  • 对方开票怎么做账务处理
  • 销项进项怎么转化
  • 电子税务局报表打印在哪里
  • 研发支出资本化的条件
  • 退税发票勾选后增值税附表二
  • 财务费用中的利息收入指什么
  • 应收账款转让的会计处理
  • 金税盘抄税报税清卡流程图
  • 预付账款为负数能转为应付账款吗
  • 会计凭证丢失补违规么
  • linux grub
  • uniapp小程序自定义tabbar在iOS手机上太高了
  • phpadmin官网
  • 税控盘抵减
  • 部shu
  • PHP:session_regenerate_id()的用法_Session函数
  • 行政事业单位捐款支出怎么记账
  • uniapp示例
  • 购进旧设备折旧年限如何计算
  • 安徽4岁男孩户口已解决
  • 悬崖边上的门
  • 境外向国内汇款新规
  • 前端框架react
  • 非正常损失可以税前扣除吗
  • 蒙特城堡干红葡萄酒价格
  • 备用金支出没有发票怎么办
  • vue 图片转base64格式的方法
  • 微信小程序商城创建
  • 微信小程序自定义tabbar
  • tune a video:one-shot tuning of image diffusion models for text-to-video generation
  • auth命令
  • create命令属于什么语句
  • lvs命令详解
  • 一般企业预缴税额怎么算
  • dedecms51
  • 生产型出口企业的概念
  • 金税四期怎么监管消费和发票
  • 全年一次性奖金税率表2023最新
  • 财政应返还额度账务处理
  • 合并资产负债表与母公司资产负债表要看那一个好
  • 执行迟延履行金的规定
  • 广发银行的主营业务
  • 车辆报废手续是什么样的
  • 预收租金会计分录科目
  • 筹建期费用账务处理
  • 存货跌价准备的计算
  • 发票已开的情况下不确认收入可以吗?
  • 外经证缴纳税费用个人卡可以用吗
  • 供货商做产品配送怎么做
  • 固定资产明细账怎么填
  • 医疗机构药库设置标准
  • sql server如何打开mdf格式文件
  • 3种不用重装的手机
  • win7电脑找不到无线网络连接图标
  • 对象转化为字符串的几种方式
  • linux nodejs
  • Ubuntu 16.04 64位中搭建Node.js开发环境教程
  • rsa加解密过程是什么
  • windows定时计划
  • nodejs图片合成
  • unity learn premium
  • 朵朵舞百科
  • android editText inputType 各个字段的含义
  • 广东省地方税务局公告2017年第7号
  • 不用税控盘可以勾选发票吗
  • 收到补税点的分录
  • 国考报四川的去哪考
  • 退回的汽车保险入什么科目
  • 土地使用税征收时间
  • 一般纳税人办理退税流程及手续
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设