分享一个uni-app实现手写签名的方法

具体代码如下:

  1. <template>
  2. <view >
  3. <view class="title">请在下面输入签名:</view>
  4. <canvas class="mycanvas" canvas-id="mycanvas" @touchstart="touchstart" @touchmove="touchmove" @touchend="touchend"></canvas>
  5. <view class="footer">
  6. <view class="left" @click="finish">完成</view>
  7. <view class="right" @click="clear">清除</view>
  8. </view>
  9. </view>
  10. </template>
  11.  
  12. <script>
  13. var x = 20;
  14. var y =20;
  15. export default{
  16. data(){
  17. return {
  18. ctx:'', //绘图图像
  19. points:[] //路径点集合
  20. }
  21. },
  22. onLoad() {
  23. this.ctx = uni.createCanvasContext("mycanvas",this); //创建绘图对象
  24.  
  25. //设置画笔样式
  26. this.ctx.lineWidth = 4;
  27. this.ctx.lineCap = "round"
  28. this.ctx.lineJoin = "round"
  29. },
  30. methods:{
  31. //触摸开始,获取到起点
  32. touchstart:function(e){
  33. let startX = e.changedTouches[0].x;
  34. let startY = e.changedTouches[0].y;
  35. let startPoint = {X:startX,Y:startY};
  36.  
  37. /* **************************************************
  38. #由于uni对canvas的实现有所不同,这里需要把起点存起来
  39. * **************************************************/
  40. this.points.push(startPoint);
  41.  
  42. //每次触摸开始,开启新的路径
  43. this.ctx.beginPath();
  44. },
  45.  
  46. //触摸移动,获取到路径点
  47. touchmove:function(e){
  48. let moveX = e.changedTouches[0].x;
  49. let moveY = e.changedTouches[0].y;
  50. let movePoint = {X:moveX,Y:moveY};
  51. this.points.push(movePoint); //存点
  52. let len = this.points.length;
  53. if(len>=2){
  54. this.draw(); //绘制路径
  55. }
  56.  
  57. },
  58.  
  59. // 触摸结束,将未绘制的点清空防止对后续路径产生干扰
  60. touchend:function(){
  61. this.points=[];
  62. },
  63.  
  64. /* ***********************************************
  65. # 绘制笔迹
  66. # 1.为保证笔迹实时显示,必须在移动的同时绘制笔迹
  67. # 2.为保证笔迹连续,每次从路径集合中区两个点作为起点(moveTo)和终点(lineTo)
  68. # 3.将上一次的终点作为下一次绘制的起点(即清除第一个点)
  69. ************************************************ */
  70. draw: function() {
  71. let point1 = this.points[0]
  72. let point2 = this.points[1]
  73. this.points.shift()
  74. this.ctx.moveTo(point1.X, point1.Y)
  75. this.ctx.lineTo(point2.X, point2.Y)
  76. this.ctx.stroke()
  77. this.ctx.draw(true)
  78. },
  79.  
  80. //清空画布
  81. clear:function(){
  82. let that = this;
  83. uni.getSystemInfo({
  84. success: function(res) {
  85. let canvasw = res.windowWidth;
  86. let canvash = res.windowHeight;
  87. that.ctx.clearRect(0, 0, canvasw, canvash);
  88. that.ctx.draw(true);
  89. },
  90. })
  91. },
  92.  
  93. //完成绘画并保存到本地
  94. finish:function(){
  95. uni.canvasToTempFilePath({
  96. canvasId: 'mycanvas',
  97. success: function(res) {
  98. let path = res.tempFilePath;
  99. uni.saveImageToPhotosAlbum({
  100. filePath:path
  101. })
  102. }
  103. })
  104. }
  105. },
  106. }
  107. </script>
  108.  
  109. <style>
  110. .title{
  111. height:50upx;
  112. line-height: 50upx;
  113. font-size: 16px;
  114. }
  115. .mycanvas{
  116. width: 100%;
  117. height: calc(100vh - 200upx);
  118. background-color: #ECECEC;
  119. }
  120. .footer{
  121. font-size: 16px;
  122. height: 150upx;
  123. display: flex;
  124. justify-content: space-around;
  125. align-items: center;
  126. }
  127. .left,.right{
  128. line-height: 100upx;
  129. height: 100upx;
  130. width: 250upx;
  131. text-align: center;
  132. font-weight: bold;
  133. color: white;
  134. border-radius: 5upx;
  135. }
  136. .left{
  137. background: #007AFF;
  138. }
  139. .right{
  140. background:orange;
  141. }
  142. </style>

uni-app通过canvas实现手写签名的更多相关文章

  1. 用canvas实现手写签名功能

    最近开发网站有一个需求,要求页面上有一块区域,用户能用鼠标在上面写字,并能保存成图片 base64 码放在服务器.这样的需求用 canvas 实现是最好的.需要用到 canvas 的以下几个属性: b ...

  2. canvas画布实现手写签名效果

    最近项目中涉及到移动端手写签名的功能需求,将实现代码记录于此,供小伙伴们参考指摘哦~ HTML代码: <!--手写区--> <div class="mSign_signMa ...

  3. Ionic5手写签名SignaturePad

    测试程序下载:https://hanzhe.lanzous.com/itt47kncw3a 初始化项目 1. 首先新建一个Ionic5的项目: ionic start test-1 blank 2. ...

  4. Blazor组件自做二 : 使用JS隔离制作手写签名组件

    Blazor组件自做二 : 使用JS隔离制作手写签名组件 本文相关参考链接 JavaScript 模块中的 JavaScript 隔离 Viewer.js工程 Blazor组件自做一 : 使用JS隔离 ...

  5. html5手写签名

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta co ...

  6. HTML5 中canvas支持触摸屏的签名面板

    1.前言 最近实在是太忙了,从国庆之后的辞职,在慢慢的找工作,到今天在现在的这家公司上班大半个月了,太多的心酸泪无以言表,面试过程中,见到的坑货公司是一家又一家,好几家公司自己都只是上一天班就走了,其 ...

  7. WORD2003电子签名插件(支持手写、签章)

    1.引言 WORD电子签名插件,支持手写.本地电子图章.以及网络图章功能.软件使用VC6,以ATL方式编写,软件小巧精致. 这是我学习ATL的成果,学习过程及程序的编写,前前后后共用了一个多月的时间, ...

  8. 【开源项目】Android 手写记事 App(半成品)

    该项目已上传到 CSDN 的 Git 平台中 项目地址:https://code.csdn.net/gd920129/whiteboard GIT SSH:git@code.csdn.net:gd92 ...

  9. Atitit s2018.2 s2 doc list on home ntpc.docx  \Atiitt uke制度体系 法律 法规 规章 条例 国王诏书.docx \Atiitt 手写文字识别 讯飞科大 语音云.docx \Atitit 代码托管与虚拟主机.docx \Atitit 企业文化 每日心灵 鸡汤 值班 发布.docx \Atitit 几大研发体系对比 Stage-Gat

    Atitit s2018.2 s2 doc list on home ntpc.docx \Atiitt uke制度体系  法律 法规 规章 条例 国王诏书.docx \Atiitt 手写文字识别   ...

随机推荐

  1. 怎样用Java 8优雅的开发业务

    怎样用Java 8优雅的开发业务 目录 怎样用Java 8优雅的开发业务 函数式编程 流式编程 基本原理 案例 优雅的空处理 新的并发工具类CompletableFuture 单机批处理多线程执行模型 ...

  2. Python科学计算库Numpy

    Python科学计算库Numpy NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 1.简 ...

  3. 5分钟看懂系列:Python 线程池原理及实现

    概述 传统多线程方案会使用"即时创建, 即时销毁"的策略.尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数极其频繁,那么服务器 ...

  4. 如何去掉ul和li前面的小黑点

    做网站的时候经常会遇到如上图所示的小圆点,难看不说,还容易影响布局,下面就介绍几种消除小圆点的方法: 1. 找到相关CSS文件,在.ul 和.li 部分添加: 1 list-style: none; ...

  5. Linux 时间同步 04 ntp时间同步

    Linux 时间同步 04 ntp时间同步 目录 Linux 时间同步 04 ntp时间同步 安装ntp 配置与外部时间服务器进行时间同步的客户端主机 配置其他客户端与以上客户端主机时间同步 验证查看 ...

  6. Linux目录的慨念

    1.路径 对文件进行访问时,要用到"路径"(Path)的慨念. 顾名思义,路径是指从树型目录中的某个目录层次到某个文件的一条道路. 此路径的主要构成是目录名称,中间用"/ ...

  7. vue中Echarts的使用-自选效果

    由于项目要求使用数据图,于是我选择了我们的Echarts用来实现效果 一:全局安装Echarts npm install echarts --save(这个安装的是最新的版本有时候回报init未定义) ...

  8. 腾讯IOT安卓开发初探

    目录 腾讯IOT 安卓开发初探 Tecent IOT 开发平台的使用 新建项目 创建产品 添加自定义功能 设备开发 微信小程序配置 面板配置 新建设备 使用设备 安卓开发 前置配置 data.json ...

  9. linux security module机制

    linux security module机制 概要 Hook机制,linux MAC的通用框架,可以使用SElinux, AppArmor,等作为不同安全框架的实现

  10. 如何快速搭建hadoop集群

    安装好虚拟机,重命名为master 配置网卡 命令:vi /etc/sysconfig/network-scripts/ifcfg-en(按tab键) 这里要配置ip,网关,域名解析 例如我的 IPA ...