signature_pad实现手机端电子签名

首先大概的效果图:
image.png
实现步骤:

①:引用js
引用在线地址:

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/signature_pad@2.3.2/example/css/signature-pad.css">

也可以下载到本地引用 <script src = "html/js/signature_pad.min.js"></script>

②: html部分。我这里是一个弹出的签名

<div>
    <div class="weui-mask" id="iosMask" style="display: none;opacity: 1;visibility: visible"></div>
    <div class="weui-actionsheet" id="iosActionsheet" style="background: #fff;">
        <#--关闭图标-->
        <img class="close-icon" id="iosActionsheetCancel" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAACMUlEQVRIS71W0VHjMBB9qxRA0gF0kA5Iss73QQUXKiBXAaGCcyoIHRC+Y098HdDB0QFQgLXMeqSMotiOYSD68oylfdr3nnaX0GFtNpuRMeZSRIYA+u7IGxE9E1ExmUz+HQtDTRu2223fWnsLYO6Ca7Ai2j8CcAngDUBqjFmOx2P9Pli1QHmezwD8BfAOYGGMWTcFcBe60n0AzgD8YeaHGOkAKM9zPXDnDqTHKAn/53mu2esFF8x8H/7bA1IQEZmLyNV0Oo1p6oSpehLRmohSZtZLV2sH5OhaWWvHXwXxQZ15tgBuPI0VkOP5P4B7Zv4UXU1pOhrvjDEXqm8F5HSZMfN5eDDLMrXwvE7cSBs1z4qZYyleADwohdWPpoCezpCCOIO2Pd69zDwgz6cxZlBn4Q6BVk0XcZK8qu7kaBsxsz6+2lUH1iVbJ4u6t6Asy9SKz6EV69DCwO5/YyaRfvpkhppRhXgMyN2uEt0F2lm37YF5xk4HdErqtEz8vBlOZu+ffrAikiZJ0g9L0G9mvoisKW1Vwe9V6/uA0fn9EqQvuCzLFyLSPvJtRVVEFr1e73xXVMM38p1tQkSukyRZ7/WjoIrfWmuvv9qTnLkeASxrG1/Ad9XKtdMmSbJse/U1ldy3cu1ru+56kFEsLhG9Op6f2oaTsix/qb4iMgAw83SFFzk2bun8MCeiMxEpdIYLD4uIzgcjEXnXGcEYk35q3IopcbxrwCERVQOkiFQDpLW26KLnB+7zszC1Wdm4AAAAAElFTkSuQmCC"/>

        <#--签名-->
        <div class="sign-wrap" id="sign-edit" style="padding-bottom: 70px;">
            <div id="signature-pad" class="signature-pad">
                <div class="description">
                    <span>专家签名</span>
                </div>
                <div class="signature-pad--body">
                    <canvas id="signature-canvas"></canvas>
                    <i class="leftup lefta"></i>
                    <i class="leftup rightup"></i>
                    <i class="leftup leftdown"></i>
                    <i class="leftup rightdown"></i>
                </div>
                <div class="signature-pad--footer layui-layer-btn">
                    <button type="button" class="layui-layer-btn0 buttonclear " id="clear" data-action="clear">重签</button>
                    <button type="button" class="layui-layer-btn1 buttonclear " id="save" data-action="clear">确定</button>
                </div>
            </div>
        </div>
        <#--签名 end-->

    </div>
</div>

③: 加入样式,当然样式可以自定义咯

.signature-pad,.signature-pad--body{height:90%}
.signature-pad{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;padding:16px;width:100%;height:100%;max-height:300px;background:#fff;font-size:10px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}
.signature-pad--body{position:relative;-webkit-box-flex:1;-ms-flex:1;flex:1}
.signature-pad--body canvas{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:4px;box-shadow:0 0 5px rgba(0,0,0,.02) inset}
.signature-pad--footer{color:#c3c3c3;text-align:center;font-size:1.2em}
.signature-pad--actions{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:8px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}

④ 划重点咯JS部分

    var $iosActionsheet = $('#iosActionsheet');
    var $iosMask = $('#iosMask');
    function hideActionSheet() {
        $iosActionsheet.removeClass('weui-actionsheet_toggle');
        $iosMask.fadeOut(200);
    }
   // ..... 这里省略了弹出框的控制显示隐藏代码..........

    //签名部分
    var canvas = document.getElementById('signature-canvas');
    var signaturePad = new SignaturePad(canvas, { backgroundColor: 'rgba(255, 255, 255, 0)', penColor: 'rgb(0, 0, 0)' });
    var cancelButton = document.getElementById('clear');
    cancelButton.addEventListener('click', function (event) {
        signaturePad.clear();
    });
    //阻止键盘弹出 不写这个有的安卓手机上会弹出软键盘
    $("#signature-canvas").focus(function(){
        document.activeElement.blur();
    });
    //比如 第一次canvas所在div是隐藏 再次调出来要调用这个方法 不然会导致canvas不能绘制内容
    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();
补充2020-0308
//除了用base64提交签名还可以利用formData提交,blob 即为文件内容
let markSrc = (signaturePad.toDataURL('image/png'));
var blob = dataURItoBlob(markSrc);
function dataURLtoBlob(dataurl) {
    var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
        bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
    while(n--){
        u8arr[n] = bstr.charCodeAt(n);
    }
    return new Blob([u8arr], {type:mime});
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352