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


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 getElementsByName()的用法说明
Jul 31 Javascript
一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能
Sep 09 Javascript
jQuery查询数据返回object和字符串影响原因是什么
Aug 09 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
Apr 11 Javascript
javascript原型模式用法实例详解
Jun 04 Javascript
详解javascript高级定时器
Dec 31 Javascript
javascript运算符语法全面概述
Jul 14 Javascript
javascript DOM的详解及实例代码
Mar 06 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
May 18 Javascript
JavaScript判断浏览器版本的方法
Nov 03 Javascript
JS正则表达式验证密码强度
Mar 18 Javascript
字节飞书面试promise.all实现示例
Jun 16 Javascript
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
有关于PHP中常见数据类型的汇总分享
2014/01/06 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
W3C Group的JavaScript1.8 新特性介绍
2009/05/19 Javascript
flexigrid 参数说明
2010/11/23 Javascript
IE6/7/8/9不支持exec的简写方式
2011/05/25 Javascript
js 遍历对象的属性的代码
2011/12/29 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
2015/11/25 Javascript
轻量级jQuery插件slideBox实现带底栏轮播(焦点图)代码
2016/03/28 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
字太多用...代替的方法(两种)
2017/03/15 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
2017/07/20 Javascript
node中Express 动态设置端口的方法
2017/08/04 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
vsCode安装使用教程和插件安装方法
2020/08/24 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
python MySQLdb Windows下安装教程及问题解决方法
2015/05/09 Python
python实现爬虫下载美女图片
2015/07/14 Python
django认证系统实现自定义权限管理的方法
2018/07/16 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
2020/03/05 Python
Win 10下Anaconda虚拟环境的教程
2020/05/18 Python
css3的transition效果和transfor效果示例介绍
2013/10/30 HTML / CSS
美特斯邦威官方商城:邦购网
2016/10/13 全球购物
粉红色的鲸鱼:Vineyard Vines
2018/02/17 全球购物
巴西手表购物网站:eclock
2019/03/19 全球购物
C#如何进行LDAP用户校验
2012/11/21 面试题
小学爱国卫生月活动总结
2014/06/30 职场文书
群众路线教育实践活动批评与自我批评
2014/09/15 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
银行文明优质服务培训心得体会
2016/01/09 职场文书
学习商务礼仪心得体会
2016/01/22 职场文书
【DOTA2】半决赛强强对话~ PSG LGD vs EHOME - DPC 2022 CN REGIONAL FINALS WINTER
2022/04/02 DOTA
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python
Win11 KB5015814遇安装失败 影响开始菜单性能解决方法
2022/07/15 数码科技