微信小程序用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转成json格式的方法

    将Map对象转换为JSON格式的字符串是Java开发中很常见的操作。下面提供两种快速将Java Map对象转换为JSON格式的方法。 方法一:使用jackson-databind实现Map转JSON Jackson是一个非常常用的Java JSON库。使用jackson可以方便地将Java对象序列化为JSON格式字符串。下面是快速把Map类型转成json的示…

    Java 2023年5月26日
    00
  • Java之理解多态详解

    Java之理解多态详解 什么是多态 多态是指同样的消息可以被不同的对象接收和处理。 在实现时,一个父类的变量可以引用一个子类的对象,这个引用既可以调用父类中定义的方法,也可以调用子类中重写父类方法的方法。 多态的实现需要满足三个条件: 继承:多态必须存在于父类和子类之间. 重写:在子类中对父类的方法进行重新定义. 向上转型:使用父类类型的引用指向子类对象. …

    Java 2023年5月26日
    00
  • 关于使用key/value数据库redis和TTSERVER的心得体会

    关于使用key/value数据库redis和TTSERVER的心得体会 Redis Redis是一个开源的key/value数据库,也是一个高性能的缓存系统。在使用Redis时,有几点需要注意: 安装与配置 可以从Redis的官方网站上下载安装包,也可以使用系统包管理工具进行安装,如: sudo apt-get install redis-server 配置…

    Java 2023年5月26日
    00
  • 微信小程序仿知乎实现评论留言功能

    下面我将为您详细讲解“微信小程序仿知乎实现评论留言功能”的完整攻略。 一、前置知识和准备工作 在开始编写代码前,需要准备好以下工具和知识: 微信开发者工具:用于开发和调试微信小程序,可在微信公众平台下载并安装。 知乎API:用于获取知乎的相关数据,需要向知乎开放平台申请。 Markdown渲染库:用于将知乎中的Markdown格式的文本转化成小程序可显示的格…

    Java 2023年5月23日
    00
  • JSP输出HTML时产生的大量空格和换行的去除方法

    请看下面的完整攻略: JSP输出HTML时产生的大量空格和换行的去除方法 在JSP中输出HTML代码时,由于JSP代码与HTML代码的交错使用,很容易产生大量的空格和换行,这会导致HTML页面的体积增大,加载速度变慢,同时也不符合优化的要求。因此,我们需要对JSP输出HTML的过程进行优化,去除这些空格和换行。 下面是两种去除JSP输出HTML空格和换行的方…

    Java 2023年6月15日
    00
  • Spring Boot使用和配置Druid

    下面是SpringBoot使用和配置Druid的完整攻略: 1. 引入Druid和SpringBoot Starter依赖 在Maven的pom.xml文件中,加入Druid和SpringBoot Starter的依赖。 <dependency> <groupId>com.alibaba</groupId> <art…

    Java 2023年5月15日
    00
  • 如何使用GSON解析JSON数据

    下面是如何使用GSON解析JSON数据的完整攻略: 什么是 GSON GSON 是一个用于将 Java 对象序列化为 JSON 字符串或将 JSON 字符串反序列化为 Java 对象的 Java 库。它可以让开发者将 JSON 数据转换为 Java 对象,提高开发效率。 GSON 的使用步骤 导入 GSON 库 在工程的 Gradle 文件中添加以下依赖: …

    Java 2023年5月26日
    00
  • Java中类与对象的相关知识点总结

    下面是关于“Java中类与对象的相关知识点总结”的详细攻略。 什么是Java中类与对象 Java是一种基于对象的编程语言,类是Java中的基本概念。类是Java中定义对象的模板,由属性和方法组成。而对象则是类的实例,具有类中定义的属性和方法。利用类和对象,我们可以很方便地组织代码、实现代码的复用和扩展。 如何定义类 定义类的格式如下: [public] cl…

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