J'Blog

h5项目中使用到的知识点汇总

h5项目中使用到的知识点汇总

html2canvas

html2canvas 将dom元素转为canvas画布图片,h5长按保存图片到本地

      const dom = document.querySelector("#id") as HTMLElement;
      const options = {
        backgroundColor: '#F6F6F6' // null或transparent可将canvas背景设置为透明
      }
      html2canvas(dom, options).then(canvas => {
        // document.body.appendChild(canvas);
        let dataImg = canvas.toDataURL();
        setNewImgBase64(dataImg);
        setShowElement(false);
      });

常用的配置项

|参数|类型|默认值|描述| |-|-|-|-| |allowTaint|Boolean|false|是否允许跨域图像污染画布| |useCORS|Boolean|false|是否跨域加载图片| |backgroundColor|String|#fff|背景色| |width|Number|元素宽度|单元格| |height|Number|元素高度|单元格|

html2Canvas绘制跨域图片

首先在线图片域名需要配置允许跨域访问;

然后img标签需要添加crossorigin="anonymous",src后面添加时间戳防止被缓存;

      <img
        crossorigin="true"
        class="share"
        :src="src+'?'+new Date().getTime()"
      >

最后就是html2Canvas添加{allowTaint: true,useCORS: true}配置项。useCORS: true和上面crossorigin="anonymous"起到的作用是一样的(二选一即可,感兴趣的可以在源码里看一下,这个配置项就是影响给不给图片添加crossorigin="anonymous")

      html2canvas(dom, {allowTaint: true,useCORS: true,}).then(canvas => {
          let imgUrl = canvas.toDataURL()
      })

H5使用微信/支付宝jsBridge

微信js-sdk

    //1. 引入微信js-sdk:
    npm install —save weixin-js-sdk
    //2. 封装一个微信js-sdk接口引用的公共类
    import wx from ‘weixin-js-sdk’
    //3. 调用微信js-sdk之前需要先调用config配置接口,从微信公众平台获取微信相关配置信息,后台生成需要的参数信息(appId, nonceStr, signature, timestamp),配置安全域名,前端调用wx.config
    wx?.config({
        beta: true, //对于没有公开的接口需要配置beta
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId, // 必填,公众号的唯一标识
        timestamp, // 必填,生成签名的时间戳
        nonceStr, // 必填,生成签名的随机串
        signature,// 必填,签名
        jsApiList: [
            'chooseInvoiceTitle'  //获取微信抬头信息接口,属于没有公开的接口
        ] // 必填,需要使用的JS接口列表
    });
    //4. 调用接口之前还需要调用wx.ready
    //5. 例如调用获取微信抬头接口
    wx.invoke('chooseInvoiceTitle', { scene: "1" }, function (res) {
        resolve(res);
    })

支付宝jsBridge

    //支付宝jsBridge比微信sdk方便,不用引入任何库,也不需要获取配置信息,只要在支付宝环境中,window对象下就会注入AlipayJSBridge
    ready(callback) {
        // 如果jsbridge已经注入则直接调用
        if (window.AlipayJSBridge) {
            callback && callback();
        } else {
            // 如果没有注入则监听注入的事件
            document.addEventListener('AlipayJSBridgeReady', callback, false);
        }
    }
    //在每次调用接口之前都要掉用ready方法
    //以获取支付宝抬头信息为例
    this.ready(function () {
        window.AlipayJSBridge.call('startBizService', {
	    name: 'invoice-title' // name为服务名称,发票抬头写死为invoice-title
        }, async(result) => {})
    });