3分钟教你用JavaScript实现电子签名效果

 更新时间:2023年04月02日 14:08:11   作者:农民工说前端  
电子签名已经成为现代商业中不可或缺的一部分,它可以提高业务流程的效率和安全性。本文将介绍如何使用HTML5的canvas元素和JavaScript在前端实现电子签名,需要的可以参考一下

前言

电子签名已经成为现代商业中不可或缺的一部分,它可以提高业务流程的效率和安全性。在前端实现电子签名可以大大简化流程,提高用户体验,本文将介绍如何使用HTML5的canvas元素和JavaScript在前端实现电子签名。

上面是demo展示,如何实现呢?一步一步教会你

步骤一:创建HTML和CSS

首先,我们需要在HTML中创建一个canvas元素,用于绘制电子签名。我们还可以为其添加一些CSS样式,以改善用户体验。以下是一个示例

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>电子签名</title>
    <style>
      canvas {
        border: 1px solid black;
      }
      button {
        margin: 10px;
      }
    </style>
  </head>
  <body>
    <canvas id="signatureCanvas" width="400" height="200"></canvas>
    <br>
    <button id="clearButton">清除签名</button>
    <button id="saveButton">保存签名</button>
  </body>
</html>

步骤二:获取canvas元素和上下文对象

接下来,我们需要在JavaScript中获取canvas元素和其上下文对象。这将使我们能够绘制电子签名。

const canvas = document.getElementById("signatureCanvas");
const ctx = canvas.getContext("2d");

步骤三:添加绘制功能

我们将使用鼠标来绘制电子签名,因此我们需要添加以下事件处理程序

let isDrawing = false;
let lastX = 0;
let lastY = 0;

canvas.addEventListener("mousedown", startDrawing);
canvas.addEventListener("mousemove", draw);
canvas.addEventListener("mouseup", stopDrawing);
canvas.addEventListener("mouseout", stopDrawing);

function startDrawing(e) {
  isDrawing = true;
  [lastX, lastY] = [e.offsetX, e.offsetY];
}

function draw(e) {
  if (!isDrawing) return;
  ctx.beginPath();
  ctx.moveTo(lastX, lastY);
  ctx.lineTo(e.offsetX, e.offsetY);
  ctx.stroke();
  [lastX, lastY] = [e.offsetX, e.offsetY];
}

function stopDrawing() {
  isDrawing = false;
}

这段代码创建了一个布尔变量isDrawing,用于跟踪当前是否正在绘制。它还创建了三个变量,用于跟踪鼠标上一个位置的坐标。当用户按下鼠标时,startDrawing函数将设置isDrawing为true,并记录当前的坐标。当用户移动鼠标时,draw函数将绘制从上一个坐标到当前坐标的线条。最后,当用户释放鼠标或将其移出画布时,stopDrawing函数将设置isDrawing为false。

步骤四:添加清除签名功能

为了让用户清除他们的签名,我们可以添加一个按钮,当用户单击该按钮时,将清除画布上的所有内容清除

const clearButton = document.getElementById("clearButton");

clearButton.addEventListener("click", clearCanvas);

function clearCanvas() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
}

步骤五:添加保存签名功能

最后,我们可以添加一个按钮,使用户能够将签名保存为图像。以下是代码:

const saveButton = document.getElementById("saveButton");

saveButton.addEventListener("click", saveCanvas);

function saveCanvas() {
  const image = canvas.toDataURL("image/png");
  const link = document.createElement("a");
  link.download = "signature.png";
  link.href = image;
  link.click();
}

这段代码获取保存按钮,并在其上添加一个单击事件处理程序。当用户单击该按钮时,saveCanvas函数将获取画布的图像数据URL,并将其添加到一个新创建的链接元素的href属性中。然后,它将下载该链接,将图像保存为PNG文件。

到此这篇关于3分钟教你用JavaScript实现电子签名效果的文章就介绍到这了,更多相关JavaScript电子签名内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入理解MVC中的时间js格式化

    深入理解MVC中的时间js格式化

    下面小编就为大家带来一篇深入理解MVC中的时间js格式化。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • JS编写兼容IE6,7,8浏览器无缝自动轮播

    JS编写兼容IE6,7,8浏览器无缝自动轮播

    在本篇文章里我们给大家带来一篇关于用原生JS编写兼容IE6,7,8浏览器无缝自动轮播的相关知识点,需要的朋友们参考下。
    2018-10-10
  • JavaScript的变量声明与声明提前用法实例分析

    JavaScript的变量声明与声明提前用法实例分析

    这篇文章主要介绍了JavaScript的变量声明与声明提前用法,结合实例形式分析了JavaScript变量声明与声明提前相关原理、用法及操作注意事项,需要的朋友可以参考下
    2019-11-11
  • JS数据类型分类及常用判断方法

    JS数据类型分类及常用判断方法

    这篇文章主要介绍了JS数据类型分类及常用判断方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Bootstrap基本插件学习笔记之折叠(22)

    Bootstrap基本插件学习笔记之折叠(22)

    这篇文章主要为大家详细介绍了Bootstrap基本插件学习笔记之折叠的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • JavaScript实现导入导出excel的示例代码

    JavaScript实现导入导出excel的示例代码

    这篇文章主要为大家详细介绍了如何利用JavaScript语言实现导入导出excel文件的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-07-07
  • 微信小程序实现下拉选项框

    微信小程序实现下拉选项框

    这篇文章主要为大家详细介绍了微信小程序实现下拉选项框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • 微信小程序跨页面数据传递事件响应实现过程解析

    微信小程序跨页面数据传递事件响应实现过程解析

    这篇文章主要介绍了微信小程序跨页面数据传递事件响应实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能

    node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能

    这篇文章主要介绍了node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-01-01
  • 什么是JavaScript注入攻击?

    什么是JavaScript注入攻击?

    本文告诉大家什么是js注入,讨论防止 ASP.NET MVC 应用程序受到 JavaScript 注入攻击的两种技术,感兴趣的小伙伴们可以参考一下
    2016-09-09

最新评论