• Welcome to Journal web site.

我是 PHP 程序员

- 开发无止境 -

Next
Prev

HTML5+jSignature插件手写签名生成图片并转换成文件流实现服务器上传功能_驴哥爱冰月的博客_jsignature插件

Data: 2018-02-28 19:55:04Form: JournalClick: 8

HTML5+jSignature插件手写签名生成图片并转换成文件流实现服务器上传功能

 

简介

项目结构:html+vue+springboot

html引入VUE项目vue.min.js、jQuery的jquery-3.4.1.min.js,签名:modernizr.js、jSignature.min.js、jSignature.min.noconflict.js,手机端mui.min.js,弹窗样式:mustache.js、zeroModal.js

所用的js在这里

HTML

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="renderer" content="webkit">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <link rel="stylesheet" href="css/mui.min.css"/>
    <link rel="stylesheet" href="css/zeroModal.css"/>
    <title>签到</title>
      <style>
      body {
          font-family: 'Helvetica Neue', Helvetica, sans-serif;
          font-size: 17px;
          line-height: 21px;
          color: #000;
      }
      html,
      body,
      #app {
        height: 100%;
        margin: 0px;
        padding: 0px;
        /* background-color: #F5F5F5 !important; */
      }
      .content{
          margin: 0.9375rem;
      }
      .title{
        height: 2.5rem;
        background-color: #fef6e1;
        color: #dc8e35;
        padding: 0.9375rem;
        font-size: 0.9375rem;
        display: flex;
        align-items: center;
        border-radius: 0.5rem;
        margin-bottom: 0.9375rem;
      }
      .title img{
        width: 0.9375rem;
        height:0.9375rem;
        margin-right: 0.9375rem;
      }
      .flex{
          display: flex;
          color: #333333;
          border-bottom: 0.0625rem solid #efefef;
      }
      .left_label{
        height: 1.25rem;
        display: inline-block;
        line-height: 1.25rem;
        color: #999;
        padding-top: 0.625rem;
      }
      .center_label{
          flex: 1;
          line-height: 1.25rem;
          text-align: left;
      }
      .center_input{
          flex: 1;
          line-height: 1.25rem;
          text-align: center;
      }
      .flex input{
          border: 0;
          margin-bottom: 0.5rem;
      }
      .table-view{
          border-radius: 0.5rem;
          border-top: 0;
          border-bottom: 0;
          margin-top: 0;
          margin-bottom: 1rem;
          padding-left: 0;
          list-style: none;
          background-color: #fff;
         
      }
      .table-view-cell{
          padding: 0.6875rem 0.9375rem 0 0.9375rem;
          overflow: hidden;
      }
      .qm{
          padding: 0.6875rem 0.9375rem;
      }
      .table-view::before{
          position: absolute;
          right: 0;
          left: 0;
          height: 1px;
          content: '';
          -webkit-transform: scaleY(.5);
          transform: scaleY(.5);
          background-color: #c8c7cc;
          top: -1px;
      }
      .table-view:after {
          position: absolute;
          right: 0;
          bottom: 0;
          left: 0;
          height: 1px;
          content: '';
          -webkit-transform: scaleY(.5);
          transform: scaleY(.5);
          background-color: #c8c7cc;
      }
      .memo{
          line-height: 1.25rem;
          text-indent: 1.875rem;
      }
      #signature{
          border: 1px solid #CCCCCC;
      }
      .qmcenter{
          margin-top: 1rem;
      }
      #image{
          border: 1px solid #CCCCCC;
      }
  </style>
  </head>
  <body>
    <div id="app">
        <div class="content">
            <div class="title">
                <img src="image/notice.png" />
                <span>签到</span>
            </div>
            <form>
                <ul class="table-view">
                    <li class="table-view-cell mui-collapse-content flex">
                        <div class="left_label" ><font style="color: red;">*</font>手机号:</div>
                        <div class="center_input">
                            <input type="text" placeholder="请输入手机号" v-model="form.userMobile" oninvalid="userMobile"  oninput="value=value.replace(/[^\d]/g,'')">
                        </div>
                    </li>
                    <li class="table-view-cell mui-collapse-content flex">
                        <div class="left_label" ><font style="color: red;">*</font>验证码:</div>
                        <div class="center_input">
                            <input type="text" placeholder="请输入验证码" v-model="form.verificationCode"
                            style="width: 55%;" id="verificationCode">
                            <span v-show="isViewCode" style="color: #1c6fcd;" @click="sendOutVerificationCode" >获取验证码</span>
                            <span v-show="!isViewCode" style="color: #1c6fcd;">剩余时间{{count}}s</span>
                        </div>
                    </li>
                </ul>
                <ul class="table-view">
                    <li class="table-view-cell mui-collapse-content qm">
                        <div class="left_label" >
                            <font style="color: red;">*</font>签名:
                           
                        </div>
                        <button type="button" class="mui-btn mui-btn-success"
                        style="border-radius: 5px;float: right;" @click="signatureCreate">预览签名</button>
                        <button type="button" class="mui-btn mui-btn-success"
                        style="border-radius: 5px;float: right;margin-right: 7px;" @click="signatureReset">重置签名</button>
                        <div class="center_input qmcenter">
                            <div id="signatureparent">
                                <div id="signature"></div>
                            </div>
                        </div>
                    </li>
                </ul>
                <button type="button" class="mui-btn mui-btn-primary mui-btn-block" style="border-radius: 8px;" @click="submitData">提交签到</button>
            </form>
            <div id="image" style="margin:20px;display: none;"></div>
        </div>
    </div>
    <script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
    <script type="text/javascript" src="js/modernizr.js"></script>
    <script type="text/javascript" src="js/jSignature.min.js"></script>
    <script type="text/javascript" src="js/jSignature.min.noconflict.js"></script>
    <script type="text/javascript" src="js/mui.min.js"></script>
    <script type="text/javascript" src="js/vue.min.js" charset="utf-8"></script>
    <script type="text/javascript" src="js/app.js" charset="utf-8"></script>
    <script type="text/javascript" src="js/mustache.js"></script>
    <script type="text/javascript" src="js/zeroModal.js"></script>
    <script type="text/javascript">
    $(function(){
       //初始化签名插件
       var param= {
        width: '100%',//签名区域的宽
        height: '300px',//签名区域的高
        signatureLine: false,//去除默认画布上那条横线
        lineWidth: '2' //画笔的大小
       };
       $("#signature").jSignature(param);
    })
   
    var app = new Vue({
        el: '#app',
        data:{
            form:{
                userMobile:undefined,
                verificationCode:undefined
            },
            verificationCode:undefined,
            isViewCode: true,
            count: '',
            timer: null,
            ggxxrecid:undefined,
            recid:undefined,
            detail:{},
        },
        mounted: function() {
           
        },
        created() {
        //业务代码初始化
            var queryStr=this.GetStrQuery();
             if(queryStr!=null){
                var whereStr=queryStr.wherestr;
                if(whereStr!=null && whereStr!="" && whereStr!=undefined){
                    var whereJson = JSON.parse(whereStr);
                    console.log(whereJson.recid);
                    this.ggxxrecid = whereJson.recid;
                    setTimeout(function() {
                        app.getPxggDetail(whereJson.recid);
                    }, 200);
                }
            }
        },
        methods: {
        //html弹窗
            modaleAlert(content,contentDetail){
                zeroModal.alert({
                    content: content,
                    contentDetail: contentDetail,
                    width: '60%',
                    height: '40%',
                    okFn: function() {
                    }
                });
            },
            //是否获取允许验证码
            sendOutVerificationCode(){
                if(this.form.userMobile != null){
                    mui.ajax(serverUrl + "/getPxggTrainDetail", {
                        data: {
                            tel:this.form.userMobile,
                            recid:this.ggxxrecid
                        },
                        dataType: "json",
                        type: 'POST', //HTTP请求类型
                        timeout: 20000, //超时时间设置为10秒;
                        success: function(data) {
                            console.log(data);
                            if (data.code==200) {
                                app.recid = data.msg;
      &nb
Name:
<提交>