微信小程序用canvas实现电子签名

微信小程序用canvas实现电子签名攻略

1.前置知识

  1. 了解canvas的基本用法
  2. 了解微信小程序的基本开发知识

2.实现步骤

2.1 引进canvas组件

在小程序的json文件中引进canvas组件,例如:

{
  "usingComponents": {
    "canvasdrawer": "../../components/canvasdrawer/canvasdrawer"
  }
}

2.2 在页面上使用canvas组件

在wxml文件中使用canvas组件,在canvas组件上设置id并设定宽高,例如:

<canvasdrawer canvas-id='canvas' canvas-width=750 canvas-height=1000></canvasdrawer>

2.3 配置canvas组件

在小程序的js文件的onReady方法中获取canvas组件,将canvas的2d上下文赋予draw函数,设置样式

onReady: function () {
    var context = wx.createCanvasContext('canvas', this)
    this.draw(context);
},

draw: function (ctx) {
    ctx.setStrokeStyle('#000000')
    ctx.setLineWidth(4)
    ctx.setLineCap('round')
    ctx.beginPath()
}

2.4 实现签名功能

绑定touchstart、touchmove和touchend事件,在touchstart事件中获取当时的坐标,touchmove中实时画出线条,touchend中结束线条绘制

canvasStart: function(event) {
    this.setData({
        hidden: false
    });
    this.context.setStrokeStyle('#000000');
    this.context.setLineWidth(4);
    this.context.setLineCap('round');
    this.context.beginPath();

    var touches = event.touches[0];
    var x = touches.x;
    var y = touches.y;
    this.context.moveTo(x, y);
},

canvasMove: function(event) {
    var touches = event.touches[0];
    var x = touches.x;
    var y = touches.y;
    this.context.lineTo(x, y);
    this.context.stroke();
},

canvasEnd: function(event) {
    this.setData({
        hidden: true
    });
}

2.5 保存签名

将签名存储到临时文件中,使用小程序提供的api进行保存

canvasSave: function() {
    var that = this;
    wx.canvasToTempFilePath({
        canvasId: 'canvas',
        success: function(res) {
            console.log(res.tempFilePath)
            wx.saveImageToPhotosAlbum({
                filePath: res.tempFilePath,
                success: function(res) {
                    wx.showToast({
                        title: '保存成功',
                        icon: 'success',
                        duration: 2000
                    })
                },
                fail: function(res) {
                    console.log(res)
                    if (res.errMsg === "saveImageToPhotosAlbum:fail auth deny") {
                        wx.openSetting({
                            success(settingdata) {
                                console.log(settingdata)
                                if (settingdata.authSetting["scope.writePhotosAlbum"]) {
                                    console.log("获取权限成功,再次点击图片保存到相册")
                                } else {
                                    console.log("获取权限失败")
                                }
                            },
                            fail(failed) {
                                console.log("打开设置失败", failed)
                            }
                        })
                    }
                }
            })
        },
        fail: function(res) {
            console.log(res.errMsg)
        }
    });
}

3.示例1:微信小程序电子签名板

可参考微信小程序电子签名板

4.示例2:基于node.js的电子签名服务

可参考基于node.js的电子签名服务

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序用canvas实现电子签名 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • Java集合之Map接口的实现类精解

    Java集合之Map接口的实现类精解 Map是Java集合框架中的一个接口,它提供了一种将键值映射到值的集合,每个键最多只能映射到一个值。常见的实现类有HashMap、TreeMap、LinkedHashMap等。在本篇文章中,我们将详细讲解Map接口及其实现类的特点、使用方法和示例。 Map接口特点 Map接口是用于存储“键-值”对的集合,其中的键和值都是…

    Java 2023年5月19日
    00
  • 详解MyBatis Generator自动创建代码(dao,mapping,poji)

    下面我将详细讲解MyBatis Generator自动创建代码的完整攻略,包括使用步骤和示例说明。 MyBatis Generator是什么 MyBatis Generator是MyBatis框架家族中的一员,是一款自动生成MyBatis持久层代码(Mapper接口和Mapper XML文件)的工具。它是根据数据库表结构自动生成对应的JavaBean、Map…

    Java 2023年6月1日
    00
  • 面试题:Java 实现查找旋转数组的最小数字

    Java 实现查找旋转数组的最小数字 什么是旋转数组 旋转数组指的是按照某个位置将一个有序数组分成左右两个部分,并交换这两个部分的位置而形成的新的数组。例如,原始数组为 [1, 2, 3, 4, 5], 将其按照位置 3 进行旋转,得到的旋转数组为 [4, 5, 1, 2, 3]。 如何查找旋转数组的最小数字 旋转数组中的最小数字就是数组中最小的数。由于数组…

    Java 2023年5月26日
    00
  • Java如何连接数据库图文教程

    首先我来讲解一下“Java如何连接数据库”的完整攻略。 一、准备工作 1.1 下载并安装数据库 Java程序连接数据库需要先安装对应的数据库软件,这里以MySQL数据库为例。可以在官网 https://dev.mysql.com/downloads/mysql 下载MySQL Community Server安装包(根据系统位数选择),下载后按照提示安装即可…

    Java 2023年5月19日
    00
  • servlet之web路径问题_动力节点Java学院整理

    当开发Servlet时,我们通常会遇到一些Web路径相关的问题,这篇攻略将会详细讲解这些问题,并提供相应的解决方法。 1. Servlet中的Web路径问题 在Servlet中,一般涉及到两种类型的Web路径:绝对路径和相对路径。在处理这些路径时,我们需要了解以下内容: Web应用的根路径 Servlet映射路径 Servlet所在的包路径 1.1 Web应…

    Java 2023年6月16日
    00
  • SpringBoot项目开发常用技术整合

    Spring Boot项目开发常用技术整合 Spring Boot是一个基于Spring框架的快速开发应用程序的工具。它提供了一种快速、便捷的方式来创建基于Spring的应用程序,同时也提供了一些默认的和约定,使得开发人员可以更加专注于业务逻辑的实现。本文将详细讲解如何使用Spring Boot整合常用技术,并提供两个示例。 1. 整合MyBatis MyB…

    Java 2023年5月15日
    00
  • JAVA中的日期时间类用法总结

    JAVA中的日期时间类用法总结 一、介绍 JAVA中的日期时间类可以用来处理日期、时间等与时间有关的业务。JAVA中内置了多个日期时间类,比较常用的有: Date类:这个类已经被替代了,不推荐使用。 Calendar类:是一个抽象类,提供了一组可以操纵日期、时间与之对应的字段的方法,同时还提供了其他的一些常用模块方法。 SimpleDateFormat类:可…

    Java 2023年5月20日
    00
  • Java调用.dll文件的方法

    下面是Java调用.dll文件的方法的完整攻略: 1. 加载.dll文件 Java调用.dll文件时需要用到Java Native Interface(JNI),这是Java调用本地代码的一种机制。要想调用.dll文件,需要先加载它。在JNI中,可以通过System类的loadLibrary()方法来加载.dll文件。loadLibrary()方法的参数为.…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部