vue 实现电子签名功能 支持生成图片

start

  • 最近遇到需求,说是要在前端页面,做一个电子签名的功能。
  • 以前番茄玩过不少canvas的demo,这玩意我第一反应就是canvas。
  • 简单记录一下这个功能。

github

  • 自己造轮子有点麻烦,不如去github找一下。有一个关于电子签名200个star的库:vue-esign,支持vue2,vue3。查看了一下demo符合我们的要求,就它了。
    在这里插入图片描述

  • 官网地址

https://github.com/JaimeCheng/vue-esign
  • 安装依赖
npm install vue-esign --save

基本使用

<template>
  <div id="app">
    <div class="box">
      <vue-esign
        ref="esign"
        :width="800"
        :height="400"
        :isCrop="isCrop"
        :lineWidth="lineWidth"
        :lineColor="lineColor"
        :bgColor.sync="bgColor"
      />
    </div>
    <div class="button">
      <button @click="handleReset">清空画板</button>
      <button @click="handleGenerate">生成图片</button>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      lineWidth: 6,
      lineColor: "#000000",
      bgColor: "",
      resultImg: "",
      isCrop: false,
    };
  },
  methods: {
    handleReset() {
      this.$refs.esign.reset();
    },
    handleGenerate() {
      this.$refs.esign
        .generate()
        .then((res) => {
          this.resultImg = res;
         
          // 默认生成的是base64形式的图片,
          const a = document.createElement("a");
          a.href = res;
          a.download = "签名.png";
          a.click();
          a.remove()
        })
        .catch((err) => {
          alert(err); // 画布没有签字时会执行这里 'Not Signned'
        });
    },
  },
};
</script>

<style>
body,
#app {
  width: 100%;
  height: 100%;
  background-color: #eee;
  position: relative;
}
.box {
  margin: 40px auto;
  width: 800px;
  height: 400px;
  background-color: #fff;
  overflow: hidden;
}
.button {
  text-align: center;
}

button {
  padding: 10px 25px;
  background: #1889fa;
  color: white;
  border: 0;
  border-radius: 5px;
  cursor: pointer;
}
</style>

在这里插入图片描述

其他

来都来了,顺便看下的它的源码
在这里插入图片描述

  • 一个是用来注册的index.js文件
  • 一个就是vue的组件,基本就是canvas加鼠标监听事件完成的一个小功能。这里看到它是支持移动端的touch的。没啥难度,就到这了。

总结

  • 全程下来,算上创建vue项目,以及安装依赖,5分钟搞定。
  • 这个库还可以,挺实用的功能。
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Vue.js是一种流行的JavaScript框架,用于构建用户界面。要在Vue.js中实现电子签名,可以使用HTML5的Canvas元素和一些JavaScript库来实现。 以下是一个简单的示例,演示如何在Vue.js中实现电子签名: 1. 首先,在Vue组件中添加一个Canvas元素,用于绘制签名: ```html <template> <div> <canvas ref="canvas" @mousedown="startDrawing" @mousemove="draw" @mouseup="stopDrawing"></canvas> <button @click="clearCanvas">清除</button> <button @click="saveSignature">保存</button> </div> </template> ``` 2. 在Vue组件的`data`中添加一些变量来跟踪绘图状态和保存签名的数据: ```javascript <script> export default { data() { return { drawing: false, context: null, lastX: 0, lastY: 0, signatureData: null }; }, mounted() { this.context = this.$refs.canvas.getContext('2d'); }, methods: { startDrawing(event) { this.drawing = true; this.lastX = event.clientX - this.$refs.canvas.offsetLeft; this.lastY = event.clientY - this.$refs.canvas.offsetTop; }, draw(event) { if (!this.drawing) return; const x = event.clientX - this.$refs.canvas.offsetLeft; const y = event.clientY - this.$refs.canvas.offsetTop; this.context.beginPath(); this.context.moveTo(this.lastX, this.lastY); this.context.lineTo(x, y); this.context.stroke(); this.lastX = x; this.lastY = y; }, stopDrawing() { this.drawing = false; }, clearCanvas() { this.context.clearRect(0, 0, this.$refs.canvas.width, this.$refs.canvas.height); }, saveSignature() { this.signatureData = this.$refs.canvas.toDataURL(); // 将签名保存为Base64编码的图像数据 } } }; </script> ``` 在上面的代码中,`startDrawing`、`draw`和`stopDrawing`方法用于跟踪鼠标移动并在Canvas上绘制签名。`clearCanvas`方法用于清除Canvas上的内容。`saveSignature`方法将签名保存为Base64编码的图像数据。 3. 最后,在Vue组件中使用这个Canvas组件: ```html <template> <div> <SignatureCanvas></SignatureCanvas> <img v-if="signatureData" :src="signatureData" alt="Signature"> </div> </template> <script> import SignatureCanvas from './SignatureCanvas.vue'; export default { components: { SignatureCanvas } }; </script> ``` 在上面的代码中,我们使用了一个自定义的`SignatureCanvas`组件来实现签名功能,并在签名完成后显示签名图像。 这只是一个简单的示例,你可以根据自己的需求进行扩展和定制。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lazy_tomato

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值