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


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 相关文章推荐
url 特殊字符 传递参数解决方法
Jan 01 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战二)
Aug 21 Javascript
jQuery中element选择器用法实例
Dec 29 Javascript
jQuery菜单插件superfish使用指南
Apr 21 Javascript
快速移动鼠标触发问题及解决方法(ECharts外部调用保存为图片操作及工作流接线mouseenter和mouseleave)
Aug 29 Javascript
javascript的函数劫持浅析
Sep 26 Javascript
angularJS模态框$modal实例代码
May 27 Javascript
Vue.js实现列表清单的操作方法
Nov 15 Javascript
JS中touchstart事件与click事件冲突的解决方法
Mar 12 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
Apr 21 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
Aug 20 Javascript
vue动态配置模板 'component is'代码
Jul 04 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 array_search() 函数使用
2010/04/13 PHP
php之Memcache学习笔记
2013/06/17 PHP
解析thinkphp中的M()与D()方法的区别
2013/06/22 PHP
你不知道的文件上传漏洞php代码分析
2016/09/29 PHP
[JS]点出统计器
2020/10/11 Javascript
wordpress之js库集合研究介绍
2007/08/17 Javascript
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
网页自动跳转代码收集
2009/09/27 Javascript
js与jquery回车提交的方法
2015/02/03 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
实例详解display:none与visible:hidden的区别
2017/03/30 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
jquery操作checkbox的常用方法总结【附测试源码下载】
2019/06/10 jQuery
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
2020/07/09 Javascript
uniapp实现可滑动选项卡
2020/10/21 Javascript
深入理解Python 代码优化详解
2014/10/27 Python
Python获取网页上图片下载地址的方法
2015/03/11 Python
python利用datetime模块计算时间差
2015/08/04 Python
详解使用Python处理文件目录的相关方法
2015/10/16 Python
对numpy中二进制格式的数据存储与读取方法详解
2018/11/01 Python
python 输入一个数n,求n个数求乘或求和的实例
2018/11/13 Python
Python基于OpenCV实现人脸检测并保存
2019/07/23 Python
keras.utils.to_categorical和one hot格式解析
2020/07/02 Python
python读取excel数据并且画图的实现示例
2021/02/08 Python
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
英国和爱尔兰最大的地毯零售商:Kukoon
2018/12/17 全球购物
英国在线购买马术服装:EQUUS
2019/07/12 全球购物
澳洲本土太阳镜品牌:Quay Australia
2019/07/29 全球购物
党员创先争优活动总结
2014/05/04 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
家长高考寄语
2015/02/27 职场文书
机械原理课程设计心得体会
2016/01/15 职场文书
JS如何使用剪贴板操作Clipboard API
2021/05/17 Javascript
SpringBoot集成Redis的思路详解
2021/10/16 Redis
Python序列化模块JSON与Pickle
2022/06/05 Python