返回顶部
首页 > 资讯 > 前端开发 > JavaScript >小程序实现手写签名功能
  • 938
分享到

小程序实现手写签名功能

2024-04-02 19:04:59 938人浏览 安东尼
摘要

小程序利用canvas实现手写签名,供大家参考,具体内容如下 设置小程序横屏 在page.JSON或对应页面 .json文件中设置landscape代表固定横屏 "pageOrie

小程序利用canvas实现手写签名,供大家参考,具体内容如下

设置小程序横屏

在page.JSON或对应页面 .json文件中设置
landscape代表固定横屏

"pageOrientation":"landscape"

手写签名

创建canvas画布 设置监听触摸开始 移动 结束等时间

此处为uniapp示例 原生小程序的也可参考进行修改(只需将@touchmove等事件换为bindtouchmove等微信事件即可)

<view class='contents'>
        <canvas class='firstCanvas' canvas-id="firstCanvas" @touchmove='move' @touchstart='start($event)'
            @touchend='end' @touchcancel='cancel' @longtap='tap' disable-scroll='true' @error='error'>
        </canvas>
        <view class="btnBox">
            <view class="btn1" @tap='clearClick'>重签</view>
            <view class="btn2" @tap="overSign">完成签名</view>
     </view>
</view>
page {
        background-color: #f2f2f2;
    }

    canvas {
        background-color: #fff;
        width: calc(100% - 20px);
        height: calc(100% - 70px);
        margin: 10px;
        position: absolute;
    }

    .btnBox {
        display: flex;
        height: 50px;
        width: 100%;
        position: fixed;
        left: 0;
        bottom: 0;
    }

    .btnBox view {
        width: 50%;
        text-align: center;
        height: 50px;
        line-height: 50px;
        color: #FFFFFF;
    }

    .btnBox view:active {
        background-color: #CCCCCC;
        color: #333333;
    }

    .btn1{
        background-color: #FF8F58;
    }

    .btn2{
        background-color: #0599D7;
    }

重点js

var content = null;
var touchs = [];
var canvasw = 0;
var canvash = 0;
var _that;
export default {
    data() {
        return {
            isEnd: false, // 是否签名
            srcA: ''
        }
    },

    methods: {
        overSign: function() {
            if (this.isEnd) {
                let that = this
                uni.canvasToTempFilePath({
                    canvasId: 'firstCanvas',
                    fileType: 'png',
                    success: function(res) {
                        //打印图片路径
                        console.log(res.tempFilePath)
                        console.log('完成签名')
                        // 可以再次进行直接保存图片到本地,这个保存就不写了可参考之前的canvas图片保存到本地
                        // 一般签名都是要返回前一页进行提交,所以在此将图片写到微信内部文件(不会出现在手机相册中)返回上一页获取,在上一页提交后在将图片删除
                        let fsm = uni.getFileSystemManager();
                        fsm.readFile({
                            filePath: res.tempFilePath,
                            success: function(res) {
                                //转换成功
                                var arrayBuffer = res.data
                                fsm.writeFile({
                                    filePath: `${wx.env.USER_DATA_PATH}/autograph.png`,
                                    data: arrayBuffer,
                                    encoding: 'binary',
                                    success() {
                                        console.log('写入成功')
                                        uni.navigateBack()
                                    },
                                    fail(err) {
                                        console.log(err)
                                    },
                                });
                            },
                            fail: function(e) {}
                        })
                    }
                })
            } else {
                uni.showToast({
                    title: '请先完成签名',
                    icon: "none",
                    duration: 1500,
                    mask: true
                })
            }

        },
        // 画布的触摸移动开始手势响应
        start: function(event) {
            // console.log(event)
            // console.log("触摸开始" + event.changedTouches[0].x)
            // console.log("触摸开始" + event.changedTouches[0].y)
            //获取触摸开始的 x,y
            let point = {
                x: event.changedTouches[0].x,
                y: event.changedTouches[0].y
            }
            // console.log(point)
            touchs.push(point);

        },
        // 画布的触摸移动手势响应
        move: function(e) {
            let point = {
                x: e.touches[0].x,
                y: e.touches[0].y
            }
            // console.log(point)
            touchs.push(point)
            if (touchs.length >= 2) {
                this.draw(touchs)
            }
        },
        // 画布的触摸移动结束手势响应
        end: function(e) {
            // console.log("触摸结束" + e)
            // 设置为已经签名
            this.isEnd = true
            // 清空轨迹数组
            for (let i = 0; i < touchs.length; i++) {
                touchs.pop()
            }

        },
        // 画布的触摸取消响应
        cancel: function(e) {
            console.log("触摸取消" + e)
        },
        // 画布的长按手势响应
        tap: function(e) {
            console.log("长按手势" + e)
        },
        error: function(e) {
            console.log("画布触摸错误" + e)
        },
        //绘制
        draw: function(touchs) {
            // console.log(touchs[0], touchs[1])
            let point1 = touchs[0]
            let point2 = touchs[1]
            touchs.shift()
            content.moveTo(point1.x, point1.y)
            content.lineTo(point2.x, point2.y)
            content.stroke()
            content.draw(true)
        },
        //清除操作
        clearClick: function() {
            // 设置为未签名
            this.isEnd = false
            //清除画布
            content.clearRect(0, 0, canvasw, canvash)
            content.draw(true)
        },
    },
    
    onLoad: function(options) {
        _that = this
        let dev = uni.getSystemInfoSync()
        console.log(dev)
        // 获取横屏的宽高 设置画布的大小
        // screenWidth windowHeight
        canvasw = dev.screenWidth - 20
        canvash = dev.screenHeight - 70
        //获得Canvas的上下文
        content = wx.createCanvasContext('firstCanvas')
        //设置线的颜色
        content.setStrokeStyle("#000")
        //设置线的宽度
        content.setLineWidth(5)
        //设置线两端端点样式更加圆润
        content.setLineCap('round')
        //设置两条线连接处更加圆润
        content.setLineJoin('round')
        content.setFillStyle('white'); //填充白色

        content.fillRect(0, 0, canvasw, canvash); //画出矩形白色背景

        content.restore()
        content.save()
    },
}

上一页可在onshow中获取签名的图片 (若签名没有writeFile则可不理会下方的)

// 获取本地保存的图片
getImg() {
        var timestamp = new Date().getTime();
        uni.getImageInfo({
            src: `${wx.env.USER_DATA_PATH}/autograph.png`,
            success: function(res) {
                console.log(res.path)
                _that.srcA = res.path
                hasQM = true
            },
            fail: function(err) {
                console.log(err)
                _that.srcA = ''
            },
        })
    },
    //删除缓存的图片
    delPic() {
            let fsm = uni.getFileSystemManager();
            fsm.unlink({
                filePath: `${wx.env.USER_DATA_PATH}/autograph.png`,
                success(res) {
                    console.log(res)
                    _that.srcA = ''
                    hasQM = false
                },
                fail(res) {
                    console.error(res)
                }
    })
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: 小程序实现手写签名功能

本文链接: https://lsjlt.com/news/153854.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 小程序实现手写签名功能
    小程序利用canvas实现手写签名,供大家参考,具体内容如下 设置小程序横屏 在page.json或对应页面 .json文件中设置landscape代表固定横屏 "pageOrie...
    99+
    2024-04-02
  • 小程序实现手写签名
    本文实例为大家分享了小程序实现手写签名的具体代码,供大家参考,具体内容如下 方法不是我自己写的,但是也忘记最初的原版出自于哪里了,不过搜索下来就是大同小异,我就附上自己实测有效的!可...
    99+
    2024-04-02
  • 小程序实现手写板签名
    本文实例为大家分享了小程序实现手写板签名的具体代码,供大家参考,具体内容如下 1.wxss代码 page {     background: #F8F8F8; } .qianmin...
    99+
    2024-04-02
  • 微信小程序实现手写签名
    本文实例为大家分享了微信小程序实现手写签名的具体代码,供大家参考,具体内容如下 本示例具备的功能: 1、笔迹绘制 2、笔迹清空 以下是js代码: var content = null...
    99+
    2024-04-02
  • 微信小程序canvas实现手写签名
    本文实例为大家分享了微信小程序canvas实现手写签名的具体代码,供大家参考,具体内容如下 很多时候,程序中需要用到签名的功能,附上源码(微信小程序) .wxml <view...
    99+
    2024-04-02
  • 微信小程序实现手写签名(签字版)
    本文实例为大家分享了微信小程序实现手写签名的具体代码,供大家参考,具体内容如下 公司近期有个需要用户签名的功能,就用小程序canvas写了个 wxml <view class...
    99+
    2024-04-02
  • 微信小程序怎么实现手写签名
    本文小编为大家详细介绍“微信小程序怎么实现手写签名”,内容详细,步骤清晰,细节处理妥当,希望这篇“微信小程序怎么实现手写签名”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在微信小程序上实现手写签名,获取canva...
    99+
    2023-06-29
  • 微信小程序如何实现手写签名
    这篇文章主要介绍了微信小程序如何实现手写签名的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序如何实现手写签名文章都会有所收获,下面我们一起来看看吧。效果wxml<view class=&...
    99+
    2023-07-02
  • 微信小程序实现横屏手写签名
    本文实例为大家分享了微信小程序实现横屏手写签名的具体代码,供大家参考,具体内容如下 1.关键配置: "pageOrientation": "landsc...
    99+
    2024-04-02
  • 使用vue实现手写签名功能
     个人实现截图: 安装: npm install vue-esign --save 使用: 1.在main.js中引入 import vueEsign from ...
    99+
    2024-04-02
  • 微信小程序实现手写签名的示例代码
    目录1.效果图2.相关代码canvas代码js相关在微信小程序上实现手写签名,获取canvascontext新版本和旧版本有点坑,新版本在获取canvas后如果页面有滑动,则签名坐标...
    99+
    2024-04-02
  • 如何使用vue实现手写签名功能
    本篇内容介绍了“如何使用vue实现手写签名功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 个人实现截图:安装:npm inst...
    99+
    2023-06-20
  • 微信小程序怎么实现简单手写签名组件
    这篇文章主要介绍了微信小程序怎么实现简单手写签名组件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序怎么实现简单手写签名组件文章都会有所收获,下面我们一起来看看吧。需求:可以实现用户在微信小程序上手写签...
    99+
    2023-06-08
  • 微信小程序怎么实现一个手写签名组件
    这期内容当中小编将会给大家带来有关微信小程序怎么实现一个手写签名组件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。背景:在做项目过程中,需要在微信小程序中实现手写签名组件。在网上找了微信小程序手写签名实现...
    99+
    2023-06-20
  • 小程序canvas手写签名适配PC实现示例详解
    目录引言先看看效果图看看代码判别是否是PC版本注意事项结语引言 继上一篇的《丝滑流畅的手写签名功能》博文才过去没多久,我才发现 canvas 2d 无法在 PC 的小程序中使用,真实...
    99+
    2023-05-16
    小程序canvas手写签名 适配PC小程序canvas签名
  • 微信小程序实现横屏和竖屏签名功能
    本文实例为大家分享了微信小程序实现横屏和竖屏签名的具体代码,供大家参考,具体内容如下 wxml <view class="container">   <canvas...
    99+
    2024-04-02
  • Android实现手写签名
    本文实例为大家分享了Android手写签名的实现方法,产品要求用户可以在app上签协议。。所以得弄个手写签名版,参考了一些资料自己写了个PaintView去继承View,实现签...
    99+
    2022-06-06
    Android
  • 微信小程序实现简单手写签名组件的方法实例
    目录背景:需求:效果一、思路 二、实现 1. 页面与样式 2. 初始化 3. 点击时 4. 签名时 三、总结 背景: 在做项目过程中,需要在微信小程序中实现手写签名组件。在网上找了微...
    99+
    2024-04-02
  • 微信小程序实现日历签到功能
    本文实例为大家分享了微信小程序实现日历签到的具体代码,供大家参考,具体内容如下 wxml: <!--pages/signin/signin.wxml--> <vi...
    99+
    2024-04-02
  • 微信小程序实现电子签名
    本文实例为大家分享了微信小程序实现电子签名的具体代码,供大家参考,具体内容如下 <view class="sign-contain"> <view class...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作