1. 程式人生 > >【微信H5開發】基於html2canvas實現(圖文組合)圖片長按即可儲存(簡單處理)

【微信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 引數是最後生成圖片的區域

好吧 簡單說了一下 很容易實現的功能 謝謝