uni-app通过canvas实现手写签名
分享一个uni-app实现手写签名的方法
具体代码如下:
- <template>
- <view >
- <view class="title">请在下面输入签名:</view>
- <canvas class="mycanvas" canvas-id="mycanvas" @touchstart="touchstart" @touchmove="touchmove" @touchend="touchend"></canvas>
- <view class="footer">
- <view class="left" @click="finish">完成</view>
- <view class="right" @click="clear">清除</view>
- </view>
- </view>
- </template>
- <script>
- var x = 20;
- var y =20;
- export default{
- data(){
- return {
- ctx:'', //绘图图像
- points:[] //路径点集合
- }
- },
- onLoad() {
- this.ctx = uni.createCanvasContext("mycanvas",this); //创建绘图对象
- //设置画笔样式
- this.ctx.lineWidth = 4;
- this.ctx.lineCap = "round"
- this.ctx.lineJoin = "round"
- },
- methods:{
- //触摸开始,获取到起点
- touchstart:function(e){
- let startX = e.changedTouches[0].x;
- let startY = e.changedTouches[0].y;
- let startPoint = {X:startX,Y:startY};
- /* **************************************************
- #由于uni对canvas的实现有所不同,这里需要把起点存起来
- * **************************************************/
- this.points.push(startPoint);
- //每次触摸开始,开启新的路径
- this.ctx.beginPath();
- },
- //触摸移动,获取到路径点
- touchmove:function(e){
- let moveX = e.changedTouches[0].x;
- let moveY = e.changedTouches[0].y;
- let movePoint = {X:moveX,Y:moveY};
- this.points.push(movePoint); //存点
- let len = this.points.length;
- if(len>=2){
- this.draw(); //绘制路径
- }
- },
- // 触摸结束,将未绘制的点清空防止对后续路径产生干扰
- touchend:function(){
- this.points=[];
- },
- /* ***********************************************
- # 绘制笔迹
- # 1.为保证笔迹实时显示,必须在移动的同时绘制笔迹
- # 2.为保证笔迹连续,每次从路径集合中区两个点作为起点(moveTo)和终点(lineTo)
- # 3.将上一次的终点作为下一次绘制的起点(即清除第一个点)
- ************************************************ */
- draw: function() {
- let point1 = this.points[0]
- let point2 = this.points[1]
- this.points.shift()
- this.ctx.moveTo(point1.X, point1.Y)
- this.ctx.lineTo(point2.X, point2.Y)
- this.ctx.stroke()
- this.ctx.draw(true)
- },
- //清空画布
- clear:function(){
- let that = this;
- uni.getSystemInfo({
- success: function(res) {
- let canvasw = res.windowWidth;
- let canvash = res.windowHeight;
- that.ctx.clearRect(0, 0, canvasw, canvash);
- that.ctx.draw(true);
- },
- })
- },
- //完成绘画并保存到本地
- finish:function(){
- uni.canvasToTempFilePath({
- canvasId: 'mycanvas',
- success: function(res) {
- let path = res.tempFilePath;
- uni.saveImageToPhotosAlbum({
- filePath:path
- })
- }
- })
- }
- },
- }
- </script>
- <style>
- .title{
- height:50upx;
- line-height: 50upx;
- font-size: 16px;
- }
- .mycanvas{
- width: 100%;
- height: calc(100vh - 200upx);
- background-color: #ECECEC;
- }
- .footer{
- font-size: 16px;
- height: 150upx;
- display: flex;
- justify-content: space-around;
- align-items: center;
- }
- .left,.right{
- line-height: 100upx;
- height: 100upx;
- width: 250upx;
- text-align: center;
- font-weight: bold;
- color: white;
- border-radius: 5upx;
- }
- .left{
- background: #007AFF;
- }
- .right{
- background:orange;
- }
- </style>
uni-app通过canvas实现手写签名的更多相关文章
- 用canvas实现手写签名功能
最近开发网站有一个需求,要求页面上有一块区域,用户能用鼠标在上面写字,并能保存成图片 base64 码放在服务器.这样的需求用 canvas 实现是最好的.需要用到 canvas 的以下几个属性: b ...
- canvas画布实现手写签名效果
最近项目中涉及到移动端手写签名的功能需求,将实现代码记录于此,供小伙伴们参考指摘哦~ HTML代码: <!--手写区--> <div class="mSign_signMa ...
- Ionic5手写签名SignaturePad
测试程序下载:https://hanzhe.lanzous.com/itt47kncw3a 初始化项目 1. 首先新建一个Ionic5的项目: ionic start test-1 blank 2. ...
- Blazor组件自做二 : 使用JS隔离制作手写签名组件
Blazor组件自做二 : 使用JS隔离制作手写签名组件 本文相关参考链接 JavaScript 模块中的 JavaScript 隔离 Viewer.js工程 Blazor组件自做一 : 使用JS隔离 ...
- html5手写签名
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta co ...
- HTML5 中canvas支持触摸屏的签名面板
1.前言 最近实在是太忙了,从国庆之后的辞职,在慢慢的找工作,到今天在现在的这家公司上班大半个月了,太多的心酸泪无以言表,面试过程中,见到的坑货公司是一家又一家,好几家公司自己都只是上一天班就走了,其 ...
- WORD2003电子签名插件(支持手写、签章)
1.引言 WORD电子签名插件,支持手写.本地电子图章.以及网络图章功能.软件使用VC6,以ATL方式编写,软件小巧精致. 这是我学习ATL的成果,学习过程及程序的编写,前前后后共用了一个多月的时间, ...
- 【开源项目】Android 手写记事 App(半成品)
该项目已上传到 CSDN 的 Git 平台中 项目地址:https://code.csdn.net/gd920129/whiteboard GIT SSH:git@code.csdn.net:gd92 ...
- 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 手写文字识别 ...
随机推荐
- 怎样用Java 8优雅的开发业务
怎样用Java 8优雅的开发业务 目录 怎样用Java 8优雅的开发业务 函数式编程 流式编程 基本原理 案例 优雅的空处理 新的并发工具类CompletableFuture 单机批处理多线程执行模型 ...
- Python科学计算库Numpy
Python科学计算库Numpy NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 1.简 ...
- 5分钟看懂系列:Python 线程池原理及实现
概述 传统多线程方案会使用"即时创建, 即时销毁"的策略.尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数极其频繁,那么服务器 ...
- 如何去掉ul和li前面的小黑点
做网站的时候经常会遇到如上图所示的小圆点,难看不说,还容易影响布局,下面就介绍几种消除小圆点的方法: 1. 找到相关CSS文件,在.ul 和.li 部分添加: 1 list-style: none; ...
- Linux 时间同步 04 ntp时间同步
Linux 时间同步 04 ntp时间同步 目录 Linux 时间同步 04 ntp时间同步 安装ntp 配置与外部时间服务器进行时间同步的客户端主机 配置其他客户端与以上客户端主机时间同步 验证查看 ...
- Linux目录的慨念
1.路径 对文件进行访问时,要用到"路径"(Path)的慨念. 顾名思义,路径是指从树型目录中的某个目录层次到某个文件的一条道路. 此路径的主要构成是目录名称,中间用"/ ...
- vue中Echarts的使用-自选效果
由于项目要求使用数据图,于是我选择了我们的Echarts用来实现效果 一:全局安装Echarts npm install echarts --save(这个安装的是最新的版本有时候回报init未定义) ...
- 腾讯IOT安卓开发初探
目录 腾讯IOT 安卓开发初探 Tecent IOT 开发平台的使用 新建项目 创建产品 添加自定义功能 设备开发 微信小程序配置 面板配置 新建设备 使用设备 安卓开发 前置配置 data.json ...
- linux security module机制
linux security module机制 概要 Hook机制,linux MAC的通用框架,可以使用SElinux, AppArmor,等作为不同安全框架的实现
- 如何快速搭建hadoop集群
安装好虚拟机,重命名为master 配置网卡 命令:vi /etc/sysconfig/network-scripts/ifcfg-en(按tab键) 这里要配置ip,网关,域名解析 例如我的 IPA ...