首页 > 其他分享 >Uniapp 之手写签名

Uniapp 之手写签名

时间:2024-07-27 15:50:18浏览次数:12  
标签:Uniapp data self width points 签名 context 手写 qm

一、效果图

二、代码示例

qianming.js

export const qianming = {
    data() {
        return {
            windowWidth: 0,
            pixelRatio: 0,
            context: null,
            points: [],
            oldPoints: [],
            qm_width: 280,
            qm_height: 120,
            qm_img: ''
        }
    },
    methods: {
        qm_start() {
            const systemInfo = uni.getSystemInfoSync()
            this.windowWidth = systemInfo.windowWidth
            this.pixelRatio = systemInfo.pixelRatio
            this.context = uni.createCanvasContext('canvasId', this)
            this.context.fillStyle = '#fff'; //背景色

            uni.createSelectorQuery().in(this).select("#qianming-box").boundingClientRect((data) => {
                const width = data.width
                const height = data.height
                const lineWidth = 4 / 750 * this.windowWidth
                this.context.fillRect(0, 0, width, height)
                this.context.lineWidth = lineWidth
                this.context.strokeStyle = '#000' //画笔颜色
                this.context.lineCap = 'round'
                this.context.lineJoin = 'round'
                this.context.stroke()
                this.context.draw(true)
            }).exec();


        },
        qm_touchstart(e) {
            this.points.push({
                x: e.changedTouches[0].x,
                y: e.changedTouches[0].y
            })
            this.context.beginPath()
        },
        qm_touchmove(e) {
            this.points.push({
                x: e.changedTouches[0].x,
                y: e.changedTouches[0].y
            })
            this.oldPoints = JSON.parse(JSON.stringify(this.points))
            if (this.points.length > 1) {
                this.context.moveTo(this.points[0].x, this.points[0].y)
                this.context.lineTo(this.points[1].x, this.points[1].y)
                this.points.splice(0, 1)
                this.context.stroke()
                this.context.draw(true)
            }
        },
        qm_touchend(e) {
            this.points = []
        },
        qm_reset() {
            this.context = null
            this.points = []
            this.oldPoints = []
            this.qm_start()
        },
        qm_save() {
            if (this.oldPoints.length == 0) {
                uni.showToast({
                    title: '请进行签名!',
                    icon: 'none'
                })
                return
            }
            let self = this
            uni.canvasToTempFilePath({
                canvasId: 'canvasId',
                fileType: self.fileType,
                quality: 1,
                width: self.qm_width,
                height: self.qm_height,
                destWidth: self.qm_width * self.pixelRatio,
                destHeight: self.qm_height * self.pixelRatio,
                success: (res) => {
                    //res.tempFilePath
                    // #ifdef MP-WEIXIN
                    let fileManager = uni.getFileSystemManager();
                    fileManager.readFile({
                        filePath: res.tempFilePath,
                        encoding: 'base64',
                        success: function(data) {
                            // data.data就是base64字符串
                            let base64Data = 'data:image/png;base64,' + data.data;
                            self.qm_img = base64Data
                        },
                        fail: function(err) {
                            console.error(err);
                        }
                    });
                    // #endif

                    // #ifdef APP-PLUS
                    const path = plus.io.convertLocalFileSystemURL(res.tempFilePath) //绝对路径
                    const fileReader = new plus.io.FileReader()
                    fileReader.readAsDataURL(path)
                    fileReader.onloadend = (res) => { //读取文件成功完成的回调函数
                        console.log(res.target.result) //输出base64内容
                        let base64Data = 'data:image/png;base64,' +res.target.result;
                        self.qm_img = base64Data
                    }
                    // #endif
                    self.toHidePopup('qianming')
                },
                fail: (err) => {
                    console.log('生成图片失败:', err)
                }
            }, self)
        },
        qm_error(e) {
            console.log('错误信息:', e)
        }
    }
}
<my-popup position="qita" :show="qianming" :closeType="true">
    <view class="prompt-box">
        <view class="prompt-head">
            请在空白区域写上你的姓名
        </view>
        <view class="prompt-body">
            <view class="prompt-input-box" id="qianming-box"
                style="height: 240upx;border: 1px dashed rgb(204, 204, 204);">
                <canvas v-if="qianming" style="width:100%;height:240upx;" class="canvas-item"
                    disable-scroll="true" canvas-id="canvasId" @touchstart="qm_touchstart"
                    @touchmove="qm_touchmove" @touchend="qm_touchend" @error="qm_error"></canvas>
            </view>
        </view>
        <view class="prompt-foot">
            <view class="prompt-btn mr15" @click.stop="qm_save">确定签名</view>
            <view class="prompt-btn mr15" @click.stop="qm_reset">重写</view>
            <view class="prompt-btn prompt-btn-cancel" @click.stop="toHidePopup('qianming')">取消</view>
        </view>
    </view>
</my-popup>

 

标签:Uniapp,data,self,width,points,签名,context,手写,qm
From: https://www.cnblogs.com/yang-2018/p/18327062

相关文章

  • 架构师手写代码:分享数据库原子性与一致性实现方案(不再背概念)
    数据库事务的原子性和一致性是数据库管理系统(DBMS)中确保数据完整性和可靠性的两个关键属性。下面是这两个属性的基本概念和实现逻辑:肖哥弹架构跟大家“弹弹”数据库设计技巧,需要代码关注欢迎点赞,点赞,点赞。关注公号Solomon肖哥弹架构获取更多精彩内容历史热点文章......
  • C++优先队列 涵盖各种易错,技巧,应用和原理(附手写代码)
    当然也可以不看==> 阅读我的文章前请务必先阅读此文章! 都是废话这个文章里有视频,不知道为什么一点开文章就会播放,可以先翻到最后暂停一下再回来看目录阅读文章须知引言优先队列的概念优先队列的创建优先队列的操作*还有一些不常用的:优先队列的技巧如果类型是结构......
  • uniapp(安卓苹果app端) - 微信小程序分享提示报错“由于不支持的分享类型无法分享到微
    问题说明在uni-app(手机app端)安卓Android、苹果ios系统中,解决分享微信小程序时,页面提示:由于不支持的分享类型无法分享到微信|由于应用和小程序未绑定在同意微信开放平台账号,无法分享到微信,uniApp开发App分享微信时出现无法分享且报错提示、分享不可用、微信appid、配置......
  • uniapp 手写签名上传服务器
    用的框架是yinghuo,上传用了封装的上传<template><viewclass="container"><jp-signatureref="signatureRef":openSmooth="true"></jp-signature><viewclass="dis-flexm-top20"&......
  • 创建自签名证书
    参见:https://blog.51cto.com/u_13312531/7085170按博客意思windows要从https://slproweb.com/products/Win32OpenSSL.html里面随便下载一个点击安装,我win11下载的第一个“Win64OpenSSLv3.3.1Light的exe链接”https://slproweb.com/download/Win64OpenSSL_Light-3_3_1.exe然......
  • 代码签名是什么?不使用代码签名有什么风险?
    在如今高度网络化的时代,软件安全问题越来越受到人们的关注。为了保证软件的安全性和可信度,使用代码签名证书对软件进行数字签名成为普遍的解决方法。那么代码签名是什么?不使用代码签名有什么风险呢?今天小锐就为大家详细解答一下。代码签名是什么?代码签名是指通过一定的安全......
  • 获取手写字体的全部字形图片
    获取手写字体的全部字形图片本教程由做字体网(www.zuoziti.com)友情提供!本教程是制作手写字体系列教程,建议从序言部分开始阅读学习!如需交流,请加QQ924268440本节视频教程版权登记前的准备手写字体版权登记的类别属于美术作品类,有些登记网站会在美术类别下面细分为字体......
  • 如何出售手写字体
    如何出售手写字体本教程由做字体网(www.zuoziti.com)友情提供!本教程是制作手写字体系列教程,建议从序言部分开始阅读学习!如需交流,请加QQ924268440本节视频教程销售渠道有哪些目前允许以个人名义参与的字体销售平台有小米、字客网、找字网等等,其他的如华为、VIVO、OPPO......
  • 手写字体制作的相关软件
    手写字体制作的相关软件本教程由做字体网(www.zuoziti.com)友情提供!本教程是制作手写字体系列教程,建议从序言部分开始阅读学习!如需交流,请加QQ924268440本节视频教程1.FontCreator这是一款很好用的字体设计软件,小白很容易上手,网上也有一些零散的关于FontCreator的教......
  • 手写模板的设计
    手写模板的设计本教程由做字体网(www.zuoziti.com)友情提供!本教程是制作手写字体系列教程,建议从序言部分开始阅读学习!如需交流,请加QQ924268440本节视频教程先看一下模板样子从这一节我们正式开始制作手写字体,制作手写字体的第一步就是制作手写字体模板,先看一下我的模......