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


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 基础知识 被自己遗忘的
Oct 15 Javascript
JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结
Apr 13 Javascript
JS焦点图切换,上下翻转
May 12 Javascript
AngularJS 过滤与排序详解及实例代码
Sep 14 Javascript
Javascript实现登录记住用户名和密码功能
Mar 22 Javascript
原生JS实现图片懒加载(lazyload)实例
Jun 13 Javascript
JS实现新建文件夹功能
Jun 17 Javascript
jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】
Aug 28 jQuery
在vue中使用vue-echarts-v3的实例代码
Sep 13 Javascript
生产制造追溯系统之在线打印功能
Jun 03 Javascript
解决layer弹出层中表单不起作用的问题
Sep 09 Javascript
JavaScript中条件语句的优化技巧总结
Dec 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中GET变量的使用
2006/10/09 PHP
php读取excel文件的简单实例
2013/08/26 PHP
php中使用PHPExcel读写excel(xls)文件的方法
2014/09/15 PHP
摘自织梦CMS中的图片处理类
2015/08/08 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
2018/07/30 PHP
jQuery学习笔记 操作jQuery对象 CSS处理
2012/09/19 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
2014/03/12 Javascript
js实现仿Discuz文本框弹出层效果
2015/08/13 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
2017/06/08 Javascript
微信小程序对接七牛云存储的方法
2017/07/30 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
2017/08/14 jQuery
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
2018/05/07 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
[04:17]DOTA2完美盛典,rOtk、BurNIng携手巴图演唱《倔强》
2017/11/28 DOTA
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
Python set集合类型操作总结
2014/11/07 Python
单利模式及python实现方式详解
2018/03/20 Python
关于Python正则表达式 findall函数问题详解
2018/03/22 Python
Python中py文件引用另一个py文件变量的方法
2018/04/29 Python
Python实现微信机器人的方法
2019/09/06 Python
Python数据分析pandas模块用法实例详解
2019/11/20 Python
python实现引用其他路径包里面的模块
2020/03/09 Python
Python学习之路之pycharm的第一个项目搭建过程
2020/06/18 Python
python线程里哪种模块比较适合
2020/08/02 Python
文体活动总结范文
2014/05/05 职场文书
小学教师培训方案
2014/06/09 职场文书
关于运动会广播稿300字
2014/10/05 职场文书
大学感恩节活动策划方案
2014/10/11 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
预备党员党支部意见
2015/06/02 职场文书
2016年中学法制宣传日活动总结
2016/04/01 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang