zoukankan      html  css  js  c++  java
  • canvas进行签名,转图片上传

    <!DOCTYPE HTML>
    <html>
    
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
        <meta name="viewport"
            content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
        <link href="css/mui.min.css" rel="stylesheet" />
        <link rel="stylesheet" href="js/layui/css/layui.css">
        <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
        <script type="text/javascript" src="js/layui/layui.all.js"></script>
        <script src="js/common_xj_20171206.js"></script>
        <title>签名</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
    
            html,
            body {
                width: 100%;
                height: 100%;
            }
    
            body {
                display: -webkit-box;
                display: -moz-box;
                display: -ms-flexbox;
                display: -webkit-flex;
                display: flex;
                flex-direction: column;
                -webkit-flex-direction: column;
            }
    
            header {
                width: 100%;
                height: 0.88rem;
                line-height: 0.88rem;
                padding: 0 .24rem;
                box-sizing: border-box;
                text-align: center;
                font-size: 0.34rem;
                background: #fff;
            }
    
            #footers {
                width: 100%;
                height: 1rem;
                background: #fff;
                text-align: center;
                display: -webkit-box;
                display: -moz-box;
                display: -ms-flexbox;
                display: -webkit-flex;
                display: flex;
                align-items: center;
                justify-content: space-around;
            }
    
            button {
                width: 60px;
                height: 30px;
                border-radius: 0.34rem;
                font-size: 0.28rem;
                color: #fff;
                outline: none;
                border: 0;
            }
    
            .but1 {
                background: #999999;
            }
    
            .but2 {
                background: #ff3737;
            }
    
            #container {
                flex: 1;
                background: #f5f5f5;
                padding: 0.24rem;
                font-size: 0;
            }
    
            canvas {
                box-sizing: border-box;
                background: #fff;
            }
        </style>
    </head>
    <!-- 自适应js -->
    <script type="text/javascript" charset="utf-8">
        "use strict";
        (function (doc, win) {
            var docEl = doc.documentElement,
                resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
                recalc = function () {
                    var clientWidth = docEl.clientWidth;
                    if (!clientWidth) return;
                    docEl.style.fontSize = (clientWidth / 7.5) + 'px';
                };
            if (!doc.addEventListener) return;
            win.addEventListener(resizeEvt, recalc, false);
            doc.addEventListener('DOMContentLoaded', recalc, false);
        })(document, window);
    </script>
    
    <body>
        <div id="container">
            <canvas id="canvas"></canvas>
        </div>
        <div id="footers">
            <button class="but1">重置</button>
            <button class="but2" onclick="submit()">确定</button>
        </div>
    </body>
    <script type="text/javascript">
        var canvas = document.getElementById("canvas");
        //设置确定按钮不可用
        $('.but2').attr('disabled', true);
        var winWidth = document.documentElement.clientWidth;
        var winHight = document.documentElement.clientHeight;
        var headH = $("header").innerHeight();
        var footH = $("#footers").innerHeight();
    
        //按比例计算内边距的值,当前UI设计图宽为750,可根据项目设置
        var paddingW = (winWidth * 100 / 750) * 0.24 * 2;
        if (winWidth > winHight) {//横屏 比例用body的高来计算
            paddingW = (winHight * 100 / 750) * 0.24 * 2;
        }
    
        canvas.width = winWidth - paddingW;
        canvas.height = 200;
    
        var content = canvas.getContext("2d");
        //设置画笔的样式
        content.strokeStyle = "#000";
        content.lineWidth = 1;
        content.lineCap = 'round';
        content.lineJoin = 'round';
        content.shadowBlur = 1;
        content.shadowColor = '#000';
    
        content.beginPath();
        canvas.addEventListener("touchstart", function (e) {
            content.beginPath();
            var touch = e.targetTouches[0];
            var x = touch.pageX - canvas.offsetLeft;
            var y = touch.pageY - canvas.offsetTop;
            content.moveTo(x, y);
        });
        canvas.addEventListener("touchmove", function (event) {
            event.preventDefault();
            var touch = event.targetTouches[0];
            var x = touch.pageX - canvas.offsetLeft;
            var y = touch.pageY - canvas.offsetTop;
            content.lineTo(x, y);
            content.stroke();
        });
        canvas.addEventListener("touchend", function (event) {
            content.closePath();
            //当画布有内容时,确定按钮才可用
            $('.but2').attr('disabled', false);
        });
        document.querySelector(".but1").onclick = function () {
            content.clearRect(0, 0, canvas.offsetWidth, canvas.offsetHeight);
            $('.but2').attr('disabled', true);
        }
    
        // 确定提交签名照片
        function submit() {
            var imgBase64 = canvas.toDataURL();
            var imgPng = canvas.toDataURL('image/png');
            var image = dataURLtoBlob (imgBase64);
            var formData = new FormData();
            formData.append("file", image, Date.now() + '.jpg');
            $.ajax({
                url: '/openapi/common/upload',
                type: 'POST',
                data: formData, // 上传formdata封装的数据包
                dataType: 'JSON',
                cache: false, // 不缓存
                processData: false, // jQuery不要去处理发送的数据
                contentType: false, // jQuery不要去设置Content-Type请求头
                success: function (res) { // 成功回调
                    window.parent.layer.closeAll();
                    if (res.code == 20000) {
                        $(".signatureContent", window.parent.document).html('<img src=https://test.zgbxjj.com' +  res.data.filePath + '>');
                        $(".signatureContent img", window.parent.document).css({
                            'height': '100%',
                            'vertical-align':'top'
                        });
                        // 获取签名之后的pdf
                        window.parent.signPdf();
                    }else{
                        layer.msg(res.mssage);
                    }
                },
                error:function(){
                    window.parent.layer.closeAll();
                    layer.msg(res.mssage);
                }
            });
        }
    
        // base64转blob
        function dataURLtoBlob (dataurl) { /*将base64转换成可用formdata提交的文件*/
            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 });
        } 
    </script>
    
    </html>
  • 相关阅读:
    【学习笔记】【C语言】注释
    【学习笔记】【C语言】标识符
    【学习笔记】【C语言】关键字
    【学习笔记】【C语言】第一个C程序
    【学习笔记】Xcode常见设置
    【学习笔记】Mac OS X系统介绍
    【学习笔记】虚拟机安装Mac系统
    javascript 对象 + 数组
    SpringMVC实现原理及详解
    javaweb国际化
  • 原文地址:https://www.cnblogs.com/liangziaha/p/12486497.html
Copyright © 2011-2022 走看看