【微信H5开发】基于html2canvas实现(图文组合)图片长按即可保存(简单处理)

鉴于当前开发的功能比较简单 所以这里只涉及html5的canvas来实现功能,所以没有涉及很深的功能开发

<!DOCTYPE html>
<html>
<head>

<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport"
    content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<meta name="format-detection" content="telephone=no">
<meta http-equiv="x-rim-auto-match" content="none">
<meta name="apple-touch-fullscreen" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="description" content="">
<meta name="author" content="">

<title>订单回执</title>
<link rel="stylesheet" type="text/css"
    href="${ctx}/resource/bootstrap-3.3.4-dist/css/bootstrap.css" />
<link rel="stylesheet" type="text/css"
    href="${ctx}/resource/css/base.css" />
<link rel="stylesheet" type="text/css"
    href="${ctx}/resource/css/gomeet.css" />
<link rel="stylesheet" type="text/css"
    href="${ctx}/resource/css/gomeet_wechat.css" />
<script src="${ctx}/resource/js/jquery-1.11.1.min.js"
    type="text/javascript" charset="utf-8"></script>
<script src="${ctx}/resource/bootstrap-3.3.4-dist/js/bootstrap.js"
    type="text/javascript" charset="utf-8"></script>
<script type="text/javascript"
    src="${ctx}/resource/jBox/jquery-1.4.2.min.js"></script>    
<script type="text/javascript"
    src="${ctx}/resource/jBox/jquery.jBox-2.3.min.js"></script>
<script type="text/javascript"
    src="${ctx}/resource/jBox/i18n/jquery.jBox-zh-CN.js"></script>
    
<script src="https://cdn.bootcss.com/html2canvas/0.5.0-beta4/html2canvas.min.js"></script>
<link type="text/css" rel="stylesheet"
        href="${ctx}/resource/jBox/Skins/GrayCool/jbox.css" />

<style>
html, body {
    height: 100%;
    width: 100%;
    margin: 0;
    padding: 0;
}

body {
    background-image: url(${ctx}/resource/img/bg_01.png);
    background-repeat: no-repeat;
    background-size: 100% 100%;
    -moz-background-size: 100% 100%;
    text-align: center;
}

#content{
    width: 100%;
    height: 93%;
    padding: 15px 15px 5px 15px;
}
form{
    width:100%;
    height:100%;
    background-image:url(${ctx}/resource/img/bg_02.png);
    background-size: 100% 100%;
}
.tableArea> table{
    width:100%;
    font-size: 14px;
    color: #F85951;
    text-align: left;
    margin-top: 5%;
}
table> tr{
    border-bottom: 1px solid;
}
    
.tableArea{
    padding: 10% 5%;
    height: 80%;
}
.subgroup{
    width: 100%;
    border: none;
/*     background-color: #ffefd7; */
    text-align: left;
    min-height: 30px;
    border-radius: 5px;
    padding: 0 10px;
    }    
.footerArea{
    width: 100%;
    height:7%;
    background-image: url(${ctx}/resource/img/bg_foot.png);
    background-size:100% 100%;
    bottom: 0px; 
    position: absolute;
    }
.buttonArea{
    width: 80%;
    margin: 0 10%;
    background: url(${ctx}/resource/img/back.png);
    background-size:100% 100%;
    padding: 3%;
    font-size: 24px;
}
    #saveImg {
      width:100%;
    }
</style>
</head>
<body>

<div id="content">
    <form role="form" id="form1" action="" method="">
        <div class="tableArea" id="tableArea">
        <table style="">
            <tr style="border-bottom: 1px solid;">
                <td><span>订单编号</span></td>
                <td><span id="orderNumber"></span></td>
            </tr>
            <tr><td colspan="2"><div style="height: 15px;"></div></td></tr>
            <tr>
                <td colspan="2">
                    <span style="padding: 3% 0;">请选择以下方式之一进行付款,同时备注订单编号:
                        <br>1.银行转账至 中国建设银行 *********************
                        <br>2.支付宝直接转账至 ******************
                        <br>3.支付宝扫描下面二维码转账
                    </span>
                </td>
            </tr>
            <tr>
                <td colspan="2" style="text-align: center;">
                    <img  class="qcCodeArea" alt="" src="${ctx}/resource/img/qr_code.png" width="40%" style="margin-top: 30px;">
                </td>
            </tr>
            <tr><td colspan="2"><div style="height: 10px;"></div></td></tr>
            <tr style="text-align: center;">
                <td colspan="2"><span style="padding: 10px;border-radius:5px;font-size: 14px;">长按可以保存订单图片</span></td>
            </tr>
        </table>
        </div>
    </form>
    <img id="saveImg" alt="">
</div>
<div class="footerArea"></div>
</body>
<script>
$(function(){

    function GetQueryString(name) {
            var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
            var r = window.location.search.substr(1).match(reg);
            if (r != null)
                return unescape(r[2]);
            return null;
        }
    var orderInfo = GetQueryString("orderCode");
    $("#orderNumber").html(orderInfo);
    //生成图片
    var box = document.getElementById("content");
    var el = document.getElementById("form1");
    var saveImg = document.getElementById("saveImg");
    var canvas = document.createElement("canvas");
    var scale = window.devicePixelRatio;//获取设备的显示参数
    var ctx = canvas.getContext("2d")
    var rect = el.getBoundingClientRect(); //获取元素相对于视察的偏移量
    var w = el.offsetWidth;
    var h = el.offsetHeight;
    canvas.width = w * scale;
    canvas.height = h * scale;
    canvas.style.width = w;
    canvas.style.height = h;
    ctx.scale(scale, scale);
    ctx.translate(-rect.left, -rect.top); //设置context位置,值为相对于视窗的偏移量负值,让图片复位
    html2canvas(el, {
        scale : scale,
        canvas : canvas,
        width : w,
        height : h,
        logging : false,
        background : "#f2f2f2",
        useCORS : true
    }).then(function(canvas) {
        var dataUrl = canvas.toDataURL("jpeg");
        saveImg.src = dataUrl;
    });
    $("#form1").css("display","none");
});
</script>
</html>

页面结果:

这里简单说一下一些需要配置的参数

    var box = document.getElementById("content");
    var el = document.getElementById("form1");
    var saveImg = document.getElementById("saveImg");

box、el 参数是设置你合成后的图片布局;saveImg 参数是最后生成图片的区域

好吧 简单说了一下 很容易实现的功能 谢谢

猜你喜欢

转载自blog.csdn.net/yxk17668/article/details/83898469