实现功能

  • 能够在移动设备上实现电子签名,并保存为图片

git地址

参数说明

  • dotSize:点的大小(在屏幕上点击留下的点大小,单位:px)
  • minWidth: 线的最小宽度(单位:px,默认:0.5)
  • maxWidth:线的最大宽度(单位:px,默认:2.5)
  • throttle:节流(每次绘制两个点之间的时间,单位:ms,默认:16,注意:设置过大会显得很卡顿)
  • minDistance:最小距离(每次绘制两个点之间的最小距离,单位:px,默认:5)
  • backgroundColor:背景色(默认:#000)
  • penColor:线条颜色(默认:#fff)
  • velocityFilterWeight:根据速度控制线的weight(默认:0.7)
  • onBegin:一笔开始时触发的事件
  • onEnd:一笔结束时触发的事件

API说明

  • toDataURL():保存为图片,默认保存为png,toDataURL("image/jpeg")-保存为jpg,toDataURL("image/svg+xml")-保存为svg
  • isEmpty():签名是否为空
  • clear():清空签名
  • toData():返回签名点的数组
  • fromData():
  • off():解绑所有事件
  • on():重新绑定所有事件

调整画布尺寸

  • 给画布设置一个固定大小,有时签名会呈现一个被拉伸的状态,这是需要重新调整签名的尺寸,官方给出了方法,直接粘贴代码即可。
function resizeCanvas() {
var ratio = Math.max(window.devicePixelRatio || 1, 1);
canvas.width = canvas.offsetWidth * ratio;
canvas.height = canvas.offsetHeight * ratio;
canvas.getContext("2d").scale(ratio, ratio);
signaturePad.clear(); // otherwise isEmpty() might return incorrect value
} window.addEventListener("resize", resizeCanvas);
resizeCanvas();

使用中遇到的问题

1. 安装依赖后报错

  • v3.0.0-beta.3版本有问题,建议使用v2.3.0(官方demo使用的是v2.3.0,或者直接用demo中的js)

2. 保存后图片背景色为黑色

  • 这个问题主要是有两个方面造成的:一个是插件默认为黑色透明的背景色;一个是我保存了jpg格式的。
  • 如果想要透明背景色,直接保存为png格式,无需设置背景色,用默认的即可。

使用代码

  • 我是在angular1.X中用的
# index.html
<script type="text/javascript" src="js/lib/signature_pad.js"></script> # signature.html
<span id="selfSign"></span>
<button class="button button-fill sign" data-action="sign">签名</button> # signatureCtr.js
let signButton = document.querySelector("[data-action=sign]");
let dataURL = "";
signButton.addEventListener("click", function (event) {
SdicInterview.popup(
'<div class="popup sign-popup">' +
'<a class="color-indigo close-popup" data-popup=".sign-popup" style="font-size:25px;position:absolute;top:4px;right:10px;cursor:pointer;z-index:1"> <i class="fa fa-times"></i></a>' +
'<div id="signature-pad">' +
"<h1>专 家 签 名</h1>" +
'<canvas class="form-footer-signature"></canvas>' +
'<button class="button clear" data-action="clear">清除签名</button>' +
'<button class="button save close-popup" data-popup=".sign-popup" data-action="save-jpg">确定</button>' +
"</div>"
);
var wrapper = document.getElementById("signature-pad");
var clearButton = wrapper.querySelector("[data-action=clear]");
var canvas = wrapper.querySelector("canvas");
var saveJPGButton = wrapper.querySelector("[data-action=save-jpg]");
var signaturePad = new SignaturePad(canvas, {
backgroundColor: "#fff",
}); function resizeCanvas() {
var ratio = Math.max(window.devicePixelRatio || 1, 1); canvas.width = canvas.offsetWidth * ratio;
canvas.height = canvas.offsetHeight * ratio;
canvas.getContext("2d").scale(ratio, ratio); signaturePad.clear();
} window.onresize = resizeCanvas;
resizeCanvas();
clearButton.addEventListener("click", function (event) {
signaturePad.clear();
});
saveJPGButton.addEventListener("click", function (event) {
if (!signaturePad.isEmpty()) {
dataURL = signaturePad.toDataURL("image/jpeg");
document.getElementById("selfSign").innerHTML = '<img class="sign-img-sum" id="selfSign" src="' + dataURL + '" />';
}
});
});

Signature Pad 使用的更多相关文章

  1. Android开源项目分类汇总

    目前包括: Android开源项目第一篇——个性化控件(View)篇   包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView. ...

  2. android 很多牛叉布局github地址(转)

    原文地址 http://blog.csdn.net/luo15309823081/article/details/41449929 点击可到达github-------https://github.c ...

  3. GitHub上史上最全的Android开源项目分类汇总 (转)

    GitHub上史上最全的Android开源项目分类汇总 标签: github android 开源 | 发表时间:2014-11-23 23:00 | 作者:u013149325 分享到: 出处:ht ...

  4. Github上的andoird开源组件整理

    http://blog.csdn.net/findsafety/article/details/50623627 第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListVie ...

  5. Android开源项目汇总【转】

    主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView ...

  6. GitHub上史上最全的Android开源项目分类汇总

    今天在看博客的时候,无意中发现了 @Trinea 在GitHub上的一个项目 Android开源项目分类汇总 ,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有参考价值,包括很炫 ...

  7. Android 开源项目分类汇总(转)

    Android 开源项目分类汇总(转) ## 第一部分 个性化控件(View)主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Galler ...

  8. Android 开源项目分类汇总

    Android 开源项目分类汇总 Android 开源项目第一篇——个性化控件(View)篇  包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView ...

  9. 四款超棒的jQuery数字化签名插件

    在浏览器中,我们有很多方式来绘制生成签名效果,并且有很多很棒很智能的jQuery插件.数字化签名是未来的发展方向,正是这个原因我们这里收集并且推荐了四款超棒的jQuery数字化签名插件,希望大家喜欢! ...

随机推荐

  1. [省选联考 2021 A/B 卷] 图函数

    考虑到一件事情首先\(u -> u\)是可行的. 所以其实对于\(f(u,G')\) 只要考虑\([1,u]\)的点. 那么考虑其条件等价于\(u -> i\) 和 \(i -> u ...

  2. [GZOI2017]配对统计

    发现我们可以在\(O(n)\)里很多处理出至多\(2n\)对好对. 然后转化成二维偏序. 然后想怎么做怎么做:排序+BIT,莫队都行.

  3. Codeforces 436E - Cardboard Box(贪心/反悔贪心/数据结构)

    题面传送门 题意: 有 \(n\) 个关卡,第 \(i\) 个关卡玩到 \(1\) 颗星需要花 \(a_i\) 的时间,玩到 \(2\) 颗星需要 \(b_i\) 的时间.(\(a_i<b_i\ ...

  4. DirectX12 3D 游戏开发与实战第十一章内容

    仅供个人学习使用,请勿转载.谢谢! 11.模板 模板缓冲区(stencil buffer)是一种"离屏"(off-screen)缓冲区,我们可以利用它来实现一些效果.模板缓冲区.后 ...

  5. 【shell】真正解决syntax error:unexpected end of file?

    今天写了个较长的shell脚本,结构嵌套比较多,最后运行时,出现了syntax error: unexpected end of file的错误. 这个之前碰到过,经常在win系统转移脚本文件到uni ...

  6. 【讲座】朱正江——基于LC-MS的非靶向代谢组学

    本次课程主题为<基于LC-MS的非靶向代谢组学>,主要分为代谢组学简介.代谢组学技术简介.非靶向代谢组学方法和数据采集.非靶向代谢组学数据分析和代谢物结构鉴定几个方面. 一.代谢组简介 基 ...

  7. 聚合与分组查询,F与Q查询

    from django.db.models import Q 查询书籍名称是python入门或者价是555.55的书 book_queryset = models.Book.objects.filte ...

  8. 【模板】无源汇有上下界可行流(网络流)/ZOJ2314

    先导知识 网络最大流 题目链接 https://vjudge.net/problem/ZOJ-2314 题目大意 多组数据,第一行为数据组数 \(T\). 对于每一组数据,第一行为 \(n,m\) 表 ...

  9. 日常Java 2021/11/18

    用idea实现Javaweb登录页面 <%-- Created by IntelliJ IDEA. User: Tefuir Date: 2021/11/18 Time: 18:14 To ch ...

  10. HashMap有几种遍历方法?推荐使用哪种?

    本文已收录<面试精选>系列,Gitee 开源地址:https://gitee.com/mydb/interview HashMap 的遍历方法有很多种,不同的 JDK 版本有不同的写法,其 ...