这段做了一个nft数藏类项目,h5版本里需要实现一个分享海报的功能,总结如下。

功能简单来说就是,使用html2canvas生成海报图片,在pc端可以显示下载按钮可以下载海报,在手机端可以使用手机浏览器的分享图片或保存图片功能,从而实现将海报分享到微信里。

实现思路是:先组装要生成海报的div,然后显式弹出div,下面给出“我要分享”按钮,点击按钮用html2canvas绘图生成此div的海报图片,将海报图片覆盖至原div,pc端显示下载按钮,手机端提示长按图片使用分享或者保存功能。

1. html2canvas是基于h5的canvas绘图插件,网上用到还是比较多的,如果你组装的div模板里包含图片,用html2canvas绘出海报可能会发现图片为空白,这算是一个坑。我查了网上最后写法如下:

html2canvas(document.querySelector("#share-content" + orderNo), {useCORS: true,scrollY: 0,scrollX: 0,allowTaint: true
}).then(function(canvas) {$scope.canvas = canvas;var img = new Image()img.src = canvas.toDataURL('image/jpeg');$('#share-content' + orderNo).html(img);// 分享按钮隐藏,下载按钮显示$("#pcShareBtn").attr("style", "display:none")$("#pcCloseShareBtn").attr("style", "display:none")$("#downLoadShareBtn").attr("style", "margin-top:5px;margin-right:10px;")$("#pcCloseShareBtn1").attr("style", "margin-top:5px;margin-right:10px;")});

share-content就是div,html2canvas绘出canvas对象,然后转成img对象,覆盖到原div。

2. pc端点击分享按钮后,出现下载海报按钮,其实就是模拟一个超链接a的点击事件,然后使用浏览器下载

$scope.downloadShare = function (){var data = $scope.canvas.toDataURL().replace("image/png", "image/octet-stream;");var filename="专属海报.png";// 保存的图片名称和格式,canvas默认使用的png格式。这个格式效果最好。var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');save_link.href = data;save_link.download = filename;var event = document.createEvent('MouseEvents');event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);save_link.dispatchEvent(event);
}

3. 手机浏览器只需要绘出海报,然后提示用户长按分享或保存。

整体效果如下:

pc端

手机端(长按图片用浏览器自带的分享功能)

 

第一张和第二张其实是一样的,区别在于第一张是div,第二张是html2canvas绘出的img,这里其实是多了一步操作,我本来想一步实现,就是绘出一个隐藏的div接着直接用html2canvas画出img,但是貌似html2canvas只能根据页面目前显示的html元素绘图,所以只能先点击看到div,然后点“我要分享”再实现绘图。

另外开发中还遇到的两个小问题:

1. 就是手机端利用浏览器分享或者保存海报经测试后,大部分是可以的,但是在qq浏览器和uc浏览器山上会有不同的显示bug,网上找到有个mshare.js插件,是直接可以唤醒拉起微信分享的。

2. 在海报弹出框,如果用户点击关闭操作,这时候是需要有一步从img还原到html div的操作的,太麻烦了,我项目里直接reload了整个页面。

3. 二维码可以找网上现成插件,我用的是qrcode.min.js,需要注意生成二维码的信息长度越长,二维码的密度就越大,这时候需要放大二维码大小,不然很难识别

h5页面使用html2canvas实现分享海报相关推荐

  1. CRMEBV4小程序H5页面端宝贝列表分享海报以及会员中心分销推广不显示的常见问题解决

    上次给大家带来了CRMEB标准版和基础版分享海报不显示的问题,这里再此做一个补充,还未看之前的帖子,请先看,如果不能解决再对照本方法处理, 上次的方法:https://blog.csdn.net/id ...

  2. VUE H5页面微信/QQ/微博 分享连接设置

    VUE H5页面微信/QQ/微博 分享连接设置 问题 想改变分享的标题.副标题.图片以及重定向打开的地址? 解决 第一步:在项目控制台里面 npm i -S weixin-js-sdk ( 然后视情况 ...

  3. html(h5)页面实现微信js分享

    html(h5)页面实现微信js分享 注:并非所有代码原创 服务端实现签名等 因为引用了第三方dll,所以需先添加nuget包,这个包直接在nuget管理器中搜索不到,在pm控制台输入如下内容:也 I ...

  4. 在H5页面中禁止微信分享转发按钮-mugeda

    在H5页面中禁止微信分享转发按钮(mugeda) 在页面脚本中插入以下代码 方法一: 加一段js代码 document.addEventListener('WeixinJSBridgeReady', ...

  5. 在H5页面中禁止微信分享转发按钮

    在H5页面中禁止微信分享转发按钮(mugeda) 在页面脚本中插入以下代码 方法一: 加一段js代码 document.addEventListener('WeixinJSBridgeReady', ...

  6. H5页面使用html2canvas实现div生成为图片,保存到手机

    在做微信公众号H5页面时,需求要求html页面生成base64图片,并保存到手机相册中.之前没做过,在网上搜了相关的资料.了解到了html2canvas.js. html2canvas首先将页面生成c ...

  7. h5页面在微信内部分享

    今天自己写了一个微信分享的功能,可以说遇到了很多坑,但最好还是顺利完成了,分享给大家,让大家少爬一点坑 1.引用js: <script type="text/javascript&qu ...

  8. 微信H5页面用Html2canvas生成图片的几种方式

    Demo:仅供参考,实际业务场景请根据自己的需求修改(本案例提供的是思路和实现方式) <!DOCTYPE html> <html> <head><meta c ...

  9. uc浏览器、QQ浏览器的h5页面,点击分享按钮,分享到微信、qq、微博

    github项目地址: https://github.com/JefferyWang/nativeShare.js 使用方法 //引入CSS <link rel="stylesheet ...

最新文章

  1. Conda创建环境失败:CondaHTTPError: HTTP 000 CONNECTION FAILED
  2. 解决Layui的switch样式显示问题
  3. 让linux的防活墙也像windows一样简单易用
  4. flowvisor 命令_mininet+FlowVisor+OpenDayLight环境搭建及实验一
  5. Linux select TCP并发服务器与客户端编程
  6. 3.深度学习练习:Planar data classification with one hidden layer
  7. 基于GPU的K-Means聚类算法
  8. python groupby用法_Python 标准库实践之合并字典组成的列表
  9. WebView无法放大缩小解决方案
  10. 一步一步学linq to sql(七)并发与事物
  11. 3d slicer matlab,基于3D+slicer的医学影像分割算法及其应用研究.pdf
  12. 部署scrapy爬虫到AWS Ubuntu 18.04,用crontab定时执行
  13. 英超前瞻乐.fun|体育 中秋利物浦主场对战狼队 历史交战能否延续全胜
  14. centos7如何安装视频播放器
  15. 网络监控系统安装的六种传输方式
  16. 技术分析:苹果之后 HTML5将改变移动互联网
  17. pyhon使用CDS API抓取哥白尼气候数据(详细步骤)
  18. 2015程序员小白理财记
  19. 4G LTE频带划分和国内运行商资源分配
  20. 2021年中式烹调师(初级)考试题库及中式烹调师(初级)作业考试题库

热门文章

  1. Visual Studio 2022 中的键盘快捷方式
  2. 实验05 指针及其在程序设计中的应用(2021级)
  3. 计算机自带的加密,加密,详细教您如何用自带Bitlocker来为电脑磁盘加密
  4. 【数据结构】图(最短路径Dijkstra算法)的JAVA代码实现
  5. Windows环境下的视图之间切换快捷键及几个常用快捷键
  6. 《环太平洋》(pacific rim)观后感
  7. 关于概率dp的个人理解与总结
  8. Codeforces965—A:Paper Airplanes(思维)
  9. ensp启动路由 40错误-已解决
  10. 试炼四:switch选择结构