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


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实现的一个Flash滚动轮换显示图片代码生成器
Mar 14 Javascript
javascript 匿名函数的理解(透彻版)
Jan 28 Javascript
js本身的局限性 别让javascript做太多事
Mar 23 Javascript
JS实现简单的Canvas画图实例
Jul 04 Javascript
取消选中单选框radio的三种方式示例介绍
Dec 23 Javascript
ExpressJS入门实例
Jan 14 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
Jul 27 Javascript
原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)
Jun 21 Javascript
关于js函数解释(包括内嵌,对象等)
Nov 20 Javascript
JS判断微信扫码的方法
Aug 07 Javascript
如何在js代码中消灭for循环实例详解
Jul 29 Javascript
vue.js编译时给生成的文件增加版本号
Sep 17 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 skymvc 一款轻量、简单的php
2011/06/28 PHP
如何用C语言编写PHP扩展的详解
2013/06/13 PHP
php获取文件大小的方法
2014/02/26 PHP
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
php+ajax实现异步上传文件或图片功能
2017/07/18 PHP
PHP常用字符串函数小结(推荐)
2018/08/05 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
Javascript调用函数方法的几种方式介绍
2015/03/20 Javascript
jQuery easyui的validatebox校验规则扩展及easyui校验框validatebox用法
2016/01/18 Javascript
Bootstrap Chart组件使用教程
2016/04/28 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
2016/11/23 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
jquery实现图片放大点击切换
2017/06/06 jQuery
详解使用Next.js构建服务端渲染应用
2018/07/10 Javascript
vue中使用axios post上传头像/图片并实时显示到页面的方法
2018/09/27 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
vue基于better-scroll实现左右联动滑动页面
2020/06/30 Javascript
[01:11:15]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python爬虫爬取淘宝商品信息
2018/02/23 Python
python pandas修改列属性的方法详解
2018/06/09 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
Django之无名分组和有名分组的实现
2019/04/16 Python
用Python做一个久坐提醒小助手的示例代码
2020/02/10 Python
前端制作动画的几种方式(css3,js)
2016/12/12 HTML / CSS
用CSS3写的模仿iPhone中的返回按钮
2015/04/04 HTML / CSS
使用CSS3制作一个简单的Chrome模拟器
2015/07/15 HTML / CSS
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
经销商订货会主持词
2014/03/27 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
故宫英文导游词
2015/01/31 职场文书
楚门的世界观后感
2015/06/03 职场文书
投诉信回复范文
2015/07/03 职场文书
python中出现invalid syntax报错的几种原因分析
2022/02/12 Python
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js