在Vue项目中实现手写签名

前言

上过保险,尤其是车险的朋友应该都遇到过这样一个场景:用户确认完保单后,需要在手机上手写自己的签名,然后提交保单。那么,如何在前端实现这个功能呢?今天,带大家使用一下 sign-canvas 这个插件。

第一步 安装依赖

使用下面的命令进行依赖安装(pnpm, npmcnpm也可以)

yarn add sign-canvas

第二步 引入组件

全局注册,使用下面的代码:

//全局注册 main.js
import SignCanvas from "sign-canvas";
Vue.use(SignCanvas);

局部注册,使用下面的代码:

//局部注册
import SignCanvas from "sign-canvas";
components: {
    SignCanvas;
}

第三步 使用组件

<template>
    <div>
        <sign-canvas
            class="sign-canvas"
            ref="signCanvasRef"
            :options="options"
            v-model="signCanvasVal"
        />
        <button @click="handleCancel">取消</button>
        <button @click="handleClear">清空</button>
        <button @click="handleConfirm">确认</button>
        <button @click="handleSave">下载图片</button>
    </div>
</template>
<script>
export default {
    data() {
        signCanvasVal: null,
        options: {
            isDpr: false, //是否使用dpr兼容高倍屏 [Boolean] 可选
            lastWriteSpeed: 1, //书写速度 [Number] 可选
            lastWriteWidth: 2, //下笔的宽度 [Number] 可选
            lineCap: "round", //线条的边缘类型 [butt]平直的边缘 [round]圆形线帽 [square]    正方形线帽
            lineJoin: "bevel", //线条交汇时边角的类型  [bevel]创建斜角 [round]创建圆角 [miter]创建尖角。
            canvasWidth: 350, //canvas宽高 [Number] 可选
            canvasHeight: 370, //高度  [Number] 可选
            isShowBorder: true, //是否显示边框 [可选]
            bgColor: "#fcc", //背景色 [String] 可选
            borderWidth: 1, // 网格线宽度  [Number] 可选
            borderColor: "#ff787f", //网格颜色  [String] 可选
            writeWidth: 5, //基础轨迹宽度  [Number] 可选
            maxWriteWidth: 30, // 写字模式最大线宽  [Number] 可选
            minWriteWidth: 5, // 写字模式最小线宽  [Number] 可选
            writeColor: "#101010", // 轨迹颜色  [String] 可选
            isSign: true, //签名模式 [Boolean] 默认为非签名模式,有线框, 当设置为true的时候没有任何线框
            imgType: "png", //下载的图片格式  [String] 可选为 jpeg  canvas本是透明背景的
        },
    },
    methods: {
        handleCancel() {},
        handleClear() {
            this.$refs.signCanvasRef.canvasClear();
        },
        handleConfirm() {
            // 请注意,这里saveAsImg()方法,返回的是 base64 的图片格式
            let img = this.$refs.signCanvasRef.saveAsImg();
        },
        handleSave() {
            this.$refs.SignCanvas.downloadSignImg();
        }
    }
}
</script>

上面是具体属性配置参数,大家可以参考

最后

本文只是对 sign-canvas 这个插件的简单使用,更多内容,大家可以参考文末的官方库。

文章首发地址: https://www.cikayo.com/article/179

手写签名板 vue-sign-canvas: https://github.com/langyuxiansheng/vue-sign-canvas

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于vue实现签名手写签名的功能,可以使用HTML5的canvas标签实现。具体可以参考以下步骤: 1. 在vue组件引入canvas标签,并设置该标签的宽高和边框等样式。如下: ``` <canvas id="canvas" width="400" height="200" style="border:1px solid #000000;"></canvas> ``` 2. 在vue组件的mounted生命周期获取canvas对象,并设置canvas的绘制样式。如下: ``` mounted() { this.canvas = document.getElementById('canvas'); this.ctx = this.canvas.getContext('2d'); this.ctx.lineWidth = 2; // 设置笔画宽度 this.ctx.strokeStyle = '#000000'; // 设置笔画颜色 } ``` 3. 在提供签名功能的按钮事件,绑定canvas的鼠标事件。如下: ``` <button @click="startDrawing">签名</button> ``` startDrawing方法绑定事件: ``` startDrawing() { this.drawing = true; this.canvas.addEventListener('mousedown', this.onMouseDown); this.canvas.addEventListener('mouseup', this.onMouseUp); this.canvas.addEventListener('mousemove', this.onMouseMove); } ``` 4. 监听canvas的鼠标事件,实现手写签名。如下: ``` onMouseDown(e) { this.ctx.beginPath(); this.ctx.moveTo(e.offsetX, e.offsetY); this.mouseMoved = false; } onMouseMove(e) { if (this.drawing) { this.mouseMoved = true; this.ctx.lineTo(e.offsetX, e.offsetY); this.ctx.stroke(); } } onMouseUp(e) { if (!this.mouseMoved) { this.ctx.fillRect(e.offsetX - 1, e.offsetY - 1, 2, 2); } this.drawing = false; this.canvas.removeEventListener('mousedown', this.onMouseDown); this.canvas.removeEventListener('mouseup', this.onMouseUp); this.canvas.removeEventListener('mousemove', this.onMouseMove); } ``` 以上就是通过canvas实现vue签名手写签名的功能的具体步骤。希望能对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值