h5在微信中打开长按保存图片

需求:

邀请好友功能,根据用户id动态生成二维码,和背景图生成为一张图,长按图片后分享给好友或保存图片。
参考地址为:https://www.jianshu.com/p/abd9e9c5ba20

具体代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>分享</title>
  <meta name="description" content="">
  <meta name="keywords" content="">
  <meta name="viewport"
    content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <link rel="stylesheet" href="css/mint-ui.css">
  <link href="css/share.css" rel="stylesheet" type="text/css">
  <!-- 此处的rem.js可以参考我的上一篇博客,处理华为手机不兼容问题时的js -->
  <script src="js/rem.js"></script>
  <!-- h5处理为图片的js -->
  <script src="js/html2canvas.js"></script>
</head>

<body>
  <div id="app">
    <div class="bg-box">
      <div id="newapp">
        <!-- 背景图 -->
        <img class="bg-img" src="img/share_bg.png" />
        <!-- 生成的二维码 -->
        <div class="drawn_code">
          <div id="qrcodeHide" class="qrcode-hidden"></div>
          <div id="qrcode" class="qrcode"></div>
        </div>
      </div>
      <img class="share_button" src="img/share_button.png" alt="">
      <div class="share_desc">长按保存图片或者截屏保存图片</div>
      <div class="share_desc">分享至朋友圈,邀约参与活动有大奖</div>
    </div>
    <!--生成的图片的存放容器-->
    <div class="shareImg" id="shareImg"></div>
  </div>
</body>

</html>
<!-- 生成二维码的js -->
<script src="js/qrcode.min.js" type="text/javascript" charset="utf-8"></script>
<script src="js/vue.js"></script>
<script src="js/MINT.js"></script>
<script src="js/axios.min.js"></script>
<script src="js/axios-url.js"></script>
<script>
  var app = new Vue({
    el: '#app',
    data: {
      sharer: '' //分享用户的id
    },
    created() {
      this.sharer = this.getQueryParam('sharer')
      this.showQRcode()
    },
    mounted: function () {
      this.$nextTick(function () {
        this.conversion()
      })
    },
    methods: {
      // 地址栏参数获取
      getQueryParam(key, url) {
        var searchStr = url || window.location.search;
        searchStr = url ? decodeURIComponent(searchStr) : searchStr;
        searchStr = searchStr.replace(/^\?/, '');
        var params = searchStr.split('&');
        var paraObj = {};
        params.forEach(function (s) {
          var ss = s.split('=');
          ss.length && (paraObj[ss[0]] = ss[1])
        })
        return paraObj[key] !== undefined ? paraObj[key] : ''
      },
      // 将传入值转为整数
      parseValue(value) {
        return parseInt(value, 10);
      },
      //根据 window.devicePixelRatio 获取像素比
      getDpr() {
        if (window.devicePixelRatio && window.devicePixelRatio > 1) {
          return window.devicePixelRatio;
        }
        return 1;
      },
      // 将页面指定的dom元素转换为图片,最终实现功能
      conversion() {
        var _this = this;
        // 获取想要转换的dom节点
        var dom = document.getElementById('newapp');
        var box = window.getComputedStyle(dom);
        // dom节点计算后宽高
        var width = _this.parseValue(box.width);
        var height = _this.parseValue(box.height);
        // 获取像素比
        var scaleBy = _this.getDpr();
        // 创建自定义的canvas元素
        var canvas = document.createElement('canvas');
        // 设置canvas元素属性宽高为 DOM 节点宽高 * 像素比
        canvas.width = width * scaleBy;
        canvas.height = height * scaleBy;
        // 设置canvas css 宽高为DOM节点宽高
        canvas.style.width = width + 'px';
        canvas.style.height = height + 'px';
        // 获取画笔
        var context = canvas.getContext('2d');
        // 将所有绘制内容放大像素比倍
        context.scale(scaleBy, scaleBy);
        // 设置需要生成的图片的大小,不限于可视区域(即可保存长图)
        var w = document.getElementById('newapp').style.width;
        var h = document.getElementById('newapp').style.height;
        html2canvas(dom, {
          allowTaint: true,
          width: w,
          height: h,
          useCORS: true
        }).then(function (canvas) {
          // 将canvas转换成图片渲染到页面上
          var url = canvas.toDataURL('image/png'); // base64数据
          var image = new Image();
          image.src = url;
          document.getElementById('shareImg').appendChild(image);
        });
      },
      // 生成二维码
      showQRcode() {
        var qrbox = document.getElementById("qrcode")
        var url = 'https://th.li-dd.com/h5/weekMeeting/lottery.html?sharer=' + this.sharer + '&isQRcode=true'
        var qrHiddenBox = document.getElementById("qrcodeHide")
        var getqrcode = new QRCode(qrHiddenBox, url);
        //在小米或者华为手机上生成的二维码是通过canvas展示的,img标签被隐藏,所以需要特殊处理一下,将canvas标签隐藏,拿到生成的url放到img里面再展示出来
        var myCanvas = document.getElementsByTagName('canvas')[0];
        var image = new Image();
        image.src = myCanvas.toDataURL("image/png");
        //image.style.width = '320px'  此方法为解决uni-app中图片变大问题
        qrbox.append(image)
      },
    }
  })
</script>

html2canvas.js文件地址为:https://pan.baidu.com/s/1OozG5uoL4W1Lr2KcBRARMQ
提取码是 3ble
qrcode.min.js文件地址为:https://pan.baidu.com/s/14Ysw1QQ3381hogm2hO6f0g
提取码是 ncrj

注意事项:

此方法在uni-app中的h5中同样适用,只不过在uni-app中生成的图片宽度是正常图片的两倍,处理办法是,强制给图片添加宽度,是图片变小,见代码的倒数第二行。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值