Vue 实现电子签名并生成签名图片

目录

  1. 前言
  2. 项目结构
  3. 代码实现
  4. 总结
  5. 相关阅读

1. 前言

电子签名在现代Web应用中越来越普遍,例如合同签署、确认表单等。本文将介绍如何使用Vue.js实现一个简单的电子签名功能,并将签名生成图片。

2. 项目结构

项目结构如下:

my-vue-signature/
├── public/
│   └── index.html
├── src/
│   ├── components/
│   │   └── SignaturePad.vue
│   ├── App.vue
│   ├── main.js
├── package.json
└── README.md

3. 代码实现

3.1 安装依赖

我们将使用一个轻量级的签名画布库 signature_pad,通过npm安装:

如果想学习signature_pad点击链接 - signature_pad 库详解

bash 复制代码
npm install signature_pad

3.2 创建签名画布组件

src/components 文件夹下创建 SignaturePad.vue 文件:

vue 复制代码
<template>
    <div>
      <canvas ref="signatureCanvas" @mousedown="startDrawing" @mousemove="draw" @mouseup="endDrawing" @mouseleave="endDrawing"></canvas>
      <button @click="clearCanvas">清除</button>
      <button @click="saveSignature">保存签名</button>
    </div>
  </template>
  
  <script>
  import SignaturePad from 'signature_pad';
  
  export default {
    name: 'SignaturePad',
    data() {
      return {
        signaturePad: null,
        isDrawing: false,
      };
    },
    mounted() {
      const canvas = this.$refs.signatureCanvas;
      canvas.width = 600;
      canvas.height = 300;
      this.signaturePad = new SignaturePad(canvas);
    },
    methods: {
      startDrawing() {
        this.isDrawing = true;
        this.signaturePad.beginPath();
      },
      draw(event) {
        if (!this.isDrawing) return;
        const rect = this.$refs.signatureCanvas.getBoundingClientRect();
        this.signaturePad.lineTo(event.clientX - rect.left, event.clientY - rect.top);
        this.signaturePad.stroke();
      },
      endDrawing() {
        this.isDrawing = false;
        this.signaturePad.closePath();
      },
      clearCanvas() {
        this.signaturePad.clear();
        this.$emit('clean')
      },
      saveSignature() {
        if (this.signaturePad.isEmpty()) {
          alert('请先签名!');
          return;
        }
        const dataURL = this.signaturePad.toDataURL();
        this.$emit('save-signature', dataURL);
      },
    },
  };
  </script>
  
  <style scoped>
  canvas {
    border: 1px solid #ccc;
    display: block;
    margin-bottom: 10px;
  }
  button {
    margin-right: 10px;
  }
  </style>
  

3.3 在 App.vue 中使用组件并生成签名图片

vue 复制代码
<template>
  <div id="app">
    <div class="center">
    <h1>电子签名</h1>
    <SignaturePad @save-signature="handleSaveSignature" @clean="handleClean" />
    <div >
      <h2>签名图片:</h2>
      <div class="showimg">
        <img v-if="signatureImage" :src="signatureImage"  alt="Signature" />
      </div>
    </div>
  </div>
  </div>
</template>

<script>
import SignaturePad from './components/SignaturePad.vue';

export default {
  name: 'App',
  components: {
    SignaturePad,
  },
  data() {
    return {
      signatureImage: null,
    };
  },
  methods: {
    handleSaveSignature(dataURL) {
      this.signatureImage = dataURL;
    },
    handleClean(){
      this.signatureImage = null
    }
  },
};
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  text-align: center;
  margin-top: 60px;
  display: flex;
  justify-content: center;
  align-items: center;
  flex-direction: column
}
.center{

}
.showimg{
  border-radius: 4px;
  border: 1px solid #ccc;
  padding: 10px;
  box-sizing: border-box;
  width: 610px;
  height: 310px;
}
</style>

4. 总结

通过本文,你学习了如何使用Vue.js和 signature_pad 库实现一个简单的电子签名功能,并生成签名图片。通过这种方式,可以轻松地在Web应用中集成电子签名功能,提高用户体验。

5. 相关阅读


希望本文能帮助你实现电子签名功能。如果有任何问题或建议,请随时联系。祝你开发顺利!

相关推荐
钱多多_qdd9 分钟前
spring cache源码解析(四)——从@EnableCaching开始来阅读源码
java·spring boot·spring
waicsdn_haha11 分钟前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
_WndProc13 分钟前
C++ 日志输出
开发语言·c++·算法
web1478621072315 分钟前
C# .Net Web 路由相关配置
前端·c#·.net
m0_7482478016 分钟前
Flutter Intl包使用指南:实现国际化和本地化
前端·javascript·flutter
飞的肖19 分钟前
前端使用 Element Plus架构vue3.0实现图片拖拉拽,后等比压缩,上传到Spring Boot后端
前端·spring boot·架构
Q_192849990621 分钟前
基于Spring Boot的摄影器材租赁回收系统
java·spring boot·后端
qq_4335545422 分钟前
C++ 面向对象编程:+号运算符重载,左移运算符重载
开发语言·c++
Code_流苏24 分钟前
VSCode搭建Java开发环境 2024保姆级安装教程(Java环境搭建+VSCode安装+运行测试+背景图设置)
java·ide·vscode·搭建·java开发环境
青灯文案127 分钟前
前端 HTTP 请求由 Nginx 反向代理和 API 网关到后端服务的流程
前端·nginx·http