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


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 相关文章推荐
网页中实现浏览器的最大,最小化和关闭按钮
Mar 12 Javascript
EXT中xtype的含义分析
Jan 07 Javascript
javascript 文件的同步加载与异步加载实现原理
Dec 13 Javascript
js调用后台servlet方法实例
Jun 09 Javascript
javascript中style.left和offsetLeft的用法说明
Mar 07 Javascript
js图片预加载示例
Apr 30 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
Jan 28 Javascript
学习vue.js条件渲染
Dec 03 Javascript
解决Extjs下拉框不显示的问题
Jun 21 Javascript
Vue2.0权限树组件实现代码
Aug 29 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
Sep 18 Javascript
如何让node运行es6模块文件及其原理详解
Dec 11 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
域名查询代码公布
2006/10/09 PHP
laravel中命名路由的使用方法
2017/02/24 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
2017/10/25 PHP
javascript动画之圆形运动,环绕鼠标运动作小球
2010/07/20 Javascript
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
Jquery ajax执行顺序 返回自定义错误信息(实例讲解)
2013/11/06 Javascript
javascript继承的六大模式小结
2015/04/13 Javascript
js控制多图左右滚动切换效果代码分享
2015/08/26 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
2016/05/27 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
2017/03/29 jQuery
很棒的vue弹窗组件
2017/05/24 Javascript
jQuery Datatables表头不对齐的解决办法
2017/11/27 jQuery
Angular2开发环境搭建教程之VS Code
2017/12/15 Javascript
微信小程序三级联动选择器使用方法
2020/05/19 Javascript
angular4 共享服务在多个组件中数据通信的示例
2018/03/30 Javascript
Node.js进阶之核心模块https入门
2018/05/23 Javascript
Vue使用NPM方式搭建项目
2018/10/25 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
js实现列表向上无限滚动
2020/01/13 Javascript
React冒泡和阻止冒泡的应用详解
2020/08/18 Javascript
vue form表单post请求结合Servlet实现文件上传功能
2021/01/22 Vue.js
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
django解决订单并发问题【推荐】
2019/07/31 Python
python中with语句结合上下文管理器操作详解
2019/12/19 Python
Python3 A*寻路算法实现方式
2019/12/24 Python
python 实现PIL模块在图片画线写字
2020/05/16 Python
台湾母婴用品购物网站:Infant婴之房
2018/06/15 全球购物
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
酒吧总经理岗位职责
2013/12/10 职场文书
志愿者服务活动总结报告
2015/05/06 职场文书
物资采购管理制度
2015/08/06 职场文书
信息技术课教学反思
2016/02/23 职场文书
详解Vue的options
2021/05/15 Vue.js
k8s部署redis cluster集群的实现
2021/06/24 Redis
Python如何让字典保持有序排列
2022/04/29 Python