微信小程序实现分享朋友圈的图片功能示例


Posted in Javascript onJanuary 18, 2019

本文实例讲述了微信小程序实现分享朋友圈的图片功能。分享给大家供大家参考,具体如下:

由于微信小程序只支持分享给朋友或者群,不支持分享到朋友圈,又有分享到朋友圈这个需求,那就要想办法实现这个需求。查阅各种资料,发现基本思路有两种,一种是后端实现,另一种是前端实现,后端实现的方式这里就不讨论了,因为我是不懂后端的,只会前端的东西,所以这里就记录一下前端的实现方法。

前端要实现分享到朋友群,都是通过canvas做一张图片,然后用户手动分享朋友圈。前端具体要做的就是把要分享的页面用canvas重做一遍,生成一个图片,保存这个图片到用户本地相册。

要想用canvas,需要在页面上使用canvas标签,把它定位到页面之外,以免影响页面,在绘制图片时,图片的地址必须是通过微信下载图片后返回的虚拟地址,要不canvas无法绘制出来,接下来最主要的就是canvas的使用了,小程序的canvas和h5的canvas一样,并没有多大的区别。

下面是一个例子:

首先是在页面上创建canvas

index.wxml

<view class="canvas-box">
    <canvas canvas-id="myCanvas" style="width:100%;height:{{windowHeight}}px;"></canvas>
</view>
<button bindtap='startDraw'>分享朋友圈</button>

写一个样式把canvas定位到页面之外,以免影响页面的效果

.canvas-box{
  width: 100%;
  position: fixed;
  left: 0;
  top: 999999rpx;
}

接下来就是绘图了,具体可以参考绘图文档

startDraw:function(){
 const ctx = wx.createCanvasContext('myCanvas');
  let windowWidth = wx.getSystemInfoSync().windowWidth;
  let windowHeight = wx.getSystemInfoSync().windowHeight;
  let _this=this;
  this.setData({
   scale: 1.6
  });
  ctx.setFillStyle('#333');
  ctx.fillRect(0, 0, windowWidth, 100);
  ctx.setFontSize(20);
  ctx.setFillStyle('#fff');
  ctx.fillText('开始绘制图片', 30, 50);
  ctx.setFillStyle('#FFF');
  ctx.fillRect(0, 70, windowWidth, 600);
  ctx.setFillStyle('#666');
  ctx.setFontSize(19);
  ctx.fillText('我是标题',100, 140);
  ctx.setFontSize(20);
  ctx.fillText('微信小程序文本部分',20 , 170);
  ctx.draw()
}

到这为止,canvas绘图是做完了,现在要把canvas绘制的图形转化为图片,调用微信小程序已有的接口,接上面方法内:

wx.canvasToTempFilePath({
   x: 0,
   y: 0,
   width: windowWidth,
   height: windowHeight,
   destWidth: windowWidth,
   destHeight: windowHeight,
   canvasId: 'myCanvas',
   success: function (res1) {
    console.log('朋友圈分享图生成成功:' + res1.tempFilePath);
   }
});

这样就完成了分享图片的制作。

希望本文所述对大家微信小程序开发有所帮助。

Javascript 相关文章推荐
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
Aug 03 Javascript
关于setInterval、setTimeout在jQuery中的使用注意事项
Sep 28 Javascript
jquery性能优化高级技巧
Aug 24 Javascript
js 连续赋值的简单实现
Jun 13 Javascript
返回函数的JavaScript函数
Jun 14 Javascript
JavaScript与java语言有什么不同
Sep 22 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
Dec 26 Javascript
解决vue的变量在settimeout内部效果失效的问题
Aug 30 Javascript
工作中常用到的ES6语法
Sep 04 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
Apr 12 Javascript
js、jquery实现列表模糊搜索功能过程解析
Mar 27 jQuery
详解JavaScript作用域 闭包
Jul 29 Javascript
vue-cli3 karma单元测试的实现
Jan 18 #Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
Jan 18 #Javascript
如何解决.vue文件url引用文件的问题
Jan 18 #Javascript
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
Jan 18 #jQuery
vue.js实现的幻灯片功能示例
Jan 18 #Javascript
vue ssr 实现方式(学习笔记)
Jan 18 #Javascript
JS实现的贪吃蛇游戏完整实例
Jan 18 #Javascript
You might like
PHP数组及条件,循环语句学习
2012/11/11 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
Zend Guard使用指南及问题处理
2015/01/07 PHP
深入理解PHP内核(一)
2015/11/10 PHP
PHP中抽象类、接口的区别与选择分析
2016/03/29 PHP
PHP开发的微信现金红包功能示例
2017/06/29 PHP
浅析php如何实现爬取数据原理
2018/09/27 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
基于jquery中children()与find()的区别介绍
2013/04/26 Javascript
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
2014/06/12 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
js去除浏览器默认底图的方法
2015/06/08 Javascript
jquery点击改变class并toggle的实现代码
2016/05/15 Javascript
Angularjs根据json文件动态生成路由状态的实现方法
2017/04/17 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
javascript中神奇的 Date对象小结
2017/10/12 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
2018/02/01 Javascript
浅谈vue 单文件探索
2018/09/05 Javascript
vue+element树组件 实现树懒加载的过程详解
2019/10/21 Javascript
浅谈webpack和webpack-cli模块源码分析
2020/01/19 Javascript
Vue实现导航栏菜单
2020/08/19 Javascript
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
在Django框架中编写Context处理器的方法
2015/07/20 Python
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
2021/01/28 Python
Java如何获得ResultSet的总行数
2016/09/03 面试题
我的五年职业生涯规划
2014/01/23 职场文书
导师推荐信范文
2014/05/09 职场文书
本科毕业生自荐信
2014/06/02 职场文书
军训拉歌口号
2014/06/13 职场文书
2014年爱国卫生工作总结
2014/11/22 职场文书
2016春季运动会开幕词
2016/03/04 职场文书
MySQL去除重叠时间求时间差和的实现
2021/08/23 MySQL
nginx之内存池的实现
2022/06/28 Servers