微信小程序前端自定义分享的实现方法


Posted in Javascript onJune 13, 2019

背景

目前手上有一个小程序的项目,希望转发时分享消息的界面能够自定义,然而微信小程序只提供设置图片的url和title。

/**
  * 用户点击右上角分享
  */
 onShareAppMessage: function() {
  return {
   imageUrl:'',
   title:''
  };
 }

实现

微信小程序前端自定义分享的实现方法

我们要转发的显示内容多了一点东西:头像,用户名和点赞数。好在这个排版不是很复杂,所以我们思考了一下通过canvas去生成一张图片再return canvas所生成的图片url。

代码如下(其实还要作出一些显示上的优化,具体你们自己去调试):

先在页面里新建一个canvas 标签

<canvas canvas-id="canvasid" style="width: 375px; height: 500px;" wx:if="{{canvasShow}}"></canvas>
let context = wx.createCanvasContext('canvasid')
   context.drawImage(back.path, 0, 60, backWidth, backHeight) //绘制下方背景图
   //绘制圆形头像,参考教程:https://www.jianshu.com/p/9a6ee2648d6f 第二种方法

   context.save();
   var d = 2 * 25;
   var cx = 0 + 25;
   var cy = 0 + 25;
   context.arc(cx, cy,25, 0, 2 * Math.PI);
   context.clip();
   context.drawImage(avatar.path, 0,0, d, d);
   context.restore();
   //绘制名字和点赞数
   context.setFontSize(14)
   context.fillText('userName', 70, 32)
   let zanLength = ('100' + '次赞').length
   context.fillText('100'+ '次赞', 375 - 14 * zanLength, 32)
   //执行draw进行渲染 并返回图片url
   context.draw(true, () => {
    //此方法应执行在draw的回调中
    wx.canvasToTempFilePath({
     x: 0,
     y: 0,
     width: 375,
     height: 400,
     destWidth: 375,
     destHeight: 400,
     canvasId: 'canvasid',
     success(res) {
    //设置onShareAppMessage所返回的数据格式
      let shareInfo = {
       title: 'customTitle',
       imageUrl
      }
      //隐藏画布
      that.setData({
       canvasShow: false
      })
     }
    })
   });

然而!

在canvas中绘制的图片要在真机上显示出来是有问题的(画布污染),非同源的图片在canvas不会显示出来的。后来我们使用 wx.getImageInfo去获取图片信息,通过里面的地址去显示图片(相当于是把图片转了一道)。

wx.getImageInfo({
        src: imgUrl,
        success: function(res) {
           /**拿到返回值res[0].path,再把该值作为canvas绘制图片的路径 
            context.drawImage(res[0].path,x,x,x)**/
          let drawImgUrl = res[0].path
        }
      });

emmmm....文章很短暂,这里只是提供一下解决的思路,希望能帮助到大家~

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JavaScript高级程序设计 读书笔记之十一 内置对象Global
Mar 07 Javascript
jquery表格内容筛选实现思路及代码
Apr 16 Javascript
js中substring和substr的详细介绍与用法
Aug 29 Javascript
js switch case default 的用法示例介绍
Oct 23 Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
Mar 13 Javascript
js禁止页面刷新与后退的方法
Jun 08 Javascript
jQuery实现类似老虎机滚动抽奖效果
Aug 06 Javascript
JS原型继承四步曲及原型继承图一览
Nov 28 Javascript
webpack多页面开发实践
Dec 18 Javascript
小程序页面动态配置实现方法
Feb 05 Javascript
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
May 28 Javascript
vue elementUI批量上传文件
Apr 26 Vue.js
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
Jun 13 #Javascript
javascript实现的字符串转换成数组操作示例
Jun 13 #Javascript
javascript实现的时间格式加8小时功能示例
Jun 13 #Javascript
深入了解JavaScript代码覆盖
Jun 13 #Javascript
js使用cookie实现记住用户名功能示例
Jun 13 #Javascript
探索JavaScript中私有成员的相关知识
Jun 13 #Javascript
详解vue中的父子传值双向绑定及数据更新问题
Jun 13 #Javascript
You might like
15个小时----从修改程序到自己些程序
2006/10/09 PHP
PHP网站提速三大“软”招
2006/10/09 PHP
用PHP来写记数器(详细介绍)
2006/10/09 PHP
PHP SOCKET编程详解
2015/05/22 PHP
Zend Framework动作助手FlashMessenger用法详解
2016/03/05 PHP
php结合md5的加密解密算法实例
2016/09/30 PHP
Swoole 5将移除自动添加Event::wait()特性详解
2019/07/10 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
Windows Live的@live.com域名注册漏洞 利用代码
2006/12/27 Javascript
javascript 读取XML数据,在页面中展现、编辑、保存的实现
2009/10/27 Javascript
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
基于jQuery创建鼠标悬停效果的方法
2015/03/07 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
2015/10/26 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
Node.js websocket使用socket.io库实现实时聊天室
2017/02/20 Javascript
vue音乐播放器插件vue-aplayer的配置及其使用实例详解
2017/07/10 Javascript
详解js静态资源文件请求的处理
2017/08/01 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
js编写简易的计算器
2020/07/29 Javascript
uin-app+mockjs实现本地数据模拟
2020/08/26 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
[08:47]2018国际邀请赛 OG战队举杯时刻
2018/08/29 DOTA
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
Django中的Model操作表的实现
2018/07/24 Python
将pandas.dataframe的数据写入到文件中的方法
2018/12/07 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
2019/03/11 Python
keras 两种训练模型方式详解fit和fit_generator(节省内存)
2020/07/03 Python
CSS3绘制有活力的链接下划线
2016/07/14 HTML / CSS
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
LINUX下线程,GDI类的解释
2016/12/14 面试题
医院工作检讨书范文
2014/02/10 职场文书
市场部业务员岗位职责
2014/04/02 职场文书
学校募捐倡议书
2014/05/14 职场文书
节约用电通知
2015/04/25 职场文书