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


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 相关文章推荐
查询绑定数据岛的表格中的文本并修改显示方式的js代码
Dec 15 Javascript
一些mootools的学习资源
Feb 07 Javascript
JavaScript Perfection kill 测试及答案
Mar 23 Javascript
JQuery select控件的相关操作实现代码
Sep 14 Javascript
JS Date函数整理方便使用
Oct 23 Javascript
基于jQuery实现图片推拉门动画效果的两种方法
Aug 26 jQuery
JavaScript实现焦点进入文本框内关闭输入法的核心代码
Sep 20 Javascript
React Native之prop-types进行属性确认详解
Dec 19 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
Jan 26 Javascript
使用D3.js+Vue实现一个简单的柱形图
Aug 05 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
Sep 03 jQuery
vue视频播放插件vue-video-player的具体使用方法
Nov 08 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
thinkphp的静态缓存用法分析
2014/11/29 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
ASP中进行HTML数据及JS数据编码函数
2009/11/11 Javascript
jQuery UI 应用不同Theme的办法
2010/09/12 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
详解js闭包
2014/09/02 Javascript
javascript制作的简单注册模块表单验证
2015/04/13 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
2015/09/26 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
JS实现可用滑块滑动的缓动图代码
2019/09/01 Javascript
vue 在单页面应用里使用二级套嵌路由
2020/12/19 Vue.js
Python strip lstrip rstrip使用方法
2008/09/06 Python
在Python中使用base64模块处理字符编码的教程
2015/04/28 Python
利用Python2下载单张图片与爬取网页图片实例代码
2017/12/25 Python
python类的方法属性与方法属性的动态绑定代码详解
2017/12/27 Python
python实现搜索文本文件内容脚本
2018/06/22 Python
Python中shapefile转换geojson的示例
2019/01/03 Python
Python动态赋值的陷阱知识点总结
2019/03/17 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
python实现感知机模型的示例
2020/09/30 Python
SHEIN香港:价格实惠的女性时尚服装
2018/08/14 全球购物
Carmen Sol官网:购买果冻鞋、手袋和配件
2021/01/01 全球购物
还款承诺书范文
2014/05/20 职场文书
2014年党员自我剖析材料
2014/10/07 职场文书
学校领导四风问题整改措施思想汇报
2014/10/09 职场文书
2014保险公司内勤工作总结
2014/12/16 职场文书
2015年高三教学工作总结
2015/07/21 职场文书
高一地理教学工作总结
2015/08/12 职场文书
教师岗位说明书
2015/09/30 职场文书
详解JavaScript中的执行上下文及调用堆栈
2021/04/29 Javascript
Python中使用subprocess库创建附加进程
2021/05/11 Python
pytorch交叉熵损失函数的weight参数的使用
2021/05/24 Python
Python虚拟环境virtualenv是如何使用的
2021/06/20 Python
MySql分区类型及创建分区的方法
2022/04/13 MySQL