微信小程序用canvas画图并分享


Posted in Javascript onMarch 09, 2020

最近开始做微信小程序,有这样一个需求:

从列表页进入详情,在每一个详情页面去分享,分享出来的图片是带有当前详情数据的图片

如下图的列表:

微信小程序用canvas画图并分享

分享出来的样子:

微信小程序用canvas画图并分享

解决方案和思路:canvas画图生成图片

上代码:

【html部分】

<canvas style='width:{{canvasWidth}}px;height:{{canvasHeight}}px' canvas-id='myCanvas'></canvas>
<button open-type='share'>分享</button>

【js部分】

var ctx = "" // 用于获取canvas
var leftMargin = "" //文字距离左边边距
var topMargin = "" //文字距离右边边距
Page({

 /**
 * 页面的初始数据
 */
 data: {
 title: '人人车司机',
 salary: '500-8000元/月',
 rtype: '日结',
 rmoney: '20元',
 canvasWidth: '', // canvas宽度
 canvasHeight: '', // canvas高度
 imagePath: '' // 分享的图片路径
 },

 /**
 * 生命周期函数--监听页面加载
 */
 onLoad: function (options) {
 var that = this
 var sysInfo = wx.getSystemInfo({
  success: function (res) {
  that.setData({
   //设置宽高为屏幕宽,高为屏幕高的80%,因为文档比例为5:4
   canvasWidth: res.windowWidth,
   canvasHeight: res.windowWidth * 0.8
  })
  leftMargin = res.windowWidth
  topMargin = res.windowWidth * 0.8
  },
 })
 },

 /**
 * 生命周期函数--监听页面初次渲染完成
 */
 onReady: function () {
 ctx = wx.createCanvasContext('myCanvas')
 this.addImage()
 this.tempFilePath()
 
 },
 //画背景图
 addImage: function () {
 var context = wx.createContext();
 var that = this;
 var path = "/images/share.jpg";
 //将模板图片绘制到canvas,在开发工具中drawImage()函数有问题,不显示图片
 //不知道是什么原因,手机环境能正常显示
 ctx.drawImage(path, 0, 0, this.data.canvasWidth, this.data.canvasHeight);
 this.addTitle()
 this.addRtype()
 this.addRmoney()
 this.addSalary()
 ctx.draw()
 },
 //画标题
 addTitle: function (){
 var str = this.data.title
 ctx.font = 'normal bold 20px sans-serif';
 ctx.setTextAlign('center'); // 文字居中
 ctx.setFillStyle("#222222");
 ctx.fillText(str, this.data.canvasWidth/2,65)
 },
 // 画返费方式
 addRtype: function () {
 var str = this.data.rtype
 ctx.setFontSize(16)
 ctx.setFillStyle("#ff4200");
 ctx.setTextAlign('left');
 ctx.fillText(str, leftMargin * 0.35, topMargin * 0.4)
 },
 // 画返费金额
 addRmoney: function () {
 var str = this.data.rmoney
 ctx.setFontSize(16)
 ctx.setFillStyle("#222");
 ctx.setTextAlign('left');
 ctx.fillText(str, leftMargin * 0.35, topMargin * 0.5)
 },
 // 画薪资
 addSalary: function () {
 var str = this.data.salary
 ctx.setFontSize(16)
 ctx.setFillStyle("#222");
 ctx.setTextAlign('left');
 ctx.fillText(str, leftMargin * 0.35, topMargin * 0.61)
 },
 /**
 * 用户点击右上角分享
 */
 onShareAppMessage: function (res) {
 // return eventHandler接收到的分享参数
 return {
  title: this.data.title,
  path: '/pages/test/test',
  imageUrl: this.data.imagePath
 };
 },
 //导出图片
 tempFilePath: function(){
 let that = this;
 wx.canvasToTempFilePath({
  canvasId: 'myCanvas',
  success: function success(res) {
  wx.saveFile({
   tempFilePath: res.tempFilePath,
   success: function success(res) {
   that.setData({
    imagePath: res.savedFilePath
   });
   }
  });
  }
 });
 },

 /**
 * 生命周期函数--监听页面显示
 */
 onShow: function () {

 },

 /**
 * 生命周期函数--监听页面隐藏
 */
 onHide: function () {

 },

 /**
 * 生命周期函数--监听页面卸载
 */
 onUnload: function () {

 },

 /**
 * 页面相关事件处理函数--监听用户下拉动作
 */
 onPullDownRefresh: function () {

 },

 /**
 * 页面上拉触底事件的处理函数
 */
 onReachBottom: function () {

 }


})

为大家推荐现在关注度比较高的微信小程序教程一篇:《微信小程序开发教程》小编为大家精心整理的,希望喜欢。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js判断一个元素是否为另一个元素的子元素的代码
Mar 21 Javascript
js动态在form上插入enctype=multipart/form-data的问题
May 24 Javascript
JavaScript中定义函数的三种方法
Mar 12 Javascript
实现JavaScript的组成----BOM和DOM详解
May 18 Javascript
javascript实现抽奖程序的简单实例
Jun 07 Javascript
微信小程序实战之自定义抽屉菜单(7)
Apr 18 Javascript
利用Vue v-model实现一个自定义的表单组件
Apr 27 Javascript
微信小程序 页面滑动事件的实例详解
Oct 12 Javascript
详解如何使用router-link对象方式传递参数?
May 02 Javascript
Servlet返回的数据js解析2种方法
Dec 12 Javascript
详解node.js 事件循环
Jul 22 Javascript
解决vue自定义指令导致的内存泄漏问题
Aug 04 Javascript
JavaScript实现简单贪吃蛇效果
Mar 09 #Javascript
原生js无缝轮播插件使用详解
Mar 09 #Javascript
微信小程序自定义弹出模态框禁止底部滚动功能
Mar 09 #Javascript
JavaScript享元模式原理与用法实例详解
Mar 09 #Javascript
JavaScript装饰者模式原理与用法实例详解
Mar 09 #Javascript
JavaScript适配器模式原理与用法实例详解
Mar 09 #Javascript
JavaScript中的this基本问题实例小结
Mar 09 #Javascript
You might like
微信公众平台接口开发入门示例
2014/12/24 PHP
php关键字仅替换一次的实现函数
2015/10/29 PHP
详解Laravel视图间共享数据与视图Composer
2016/08/04 PHP
PHP基于IMAP收取邮件的方法示例
2017/08/07 PHP
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
Jquery 切换不同图片示例代码
2013/12/05 Javascript
jQuery文件上传插件Uploadify使用指南
2014/06/05 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
使用pjax实现无刷新更改页面url
2015/02/05 Javascript
jQuery获取多种input值的简单实现方法
2016/06/20 Javascript
jquery实现ajax加载超时提示的方法
2016/07/23 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
JS实现移动端按首字母检索城市列表附源码下载
2017/07/05 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
基于 flexible 的 Vue 组件:Toast -- 显示框效果
2017/12/26 Javascript
详解微信小程序支付流程与梳理
2019/07/16 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
[51:39]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第二场 2月7日
2021/03/11 DOTA
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
python开发之tkinter实现图形随鼠标移动的方法
2015/11/11 Python
Python使用functools模块中的partial函数生成偏函数
2016/07/02 Python
python机器学习之神经网络(二)
2017/12/20 Python
python redis 删除key脚本的实例
2019/02/19 Python
python类的实例化问题解决
2019/08/31 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
Python基于locals返回作用域字典
2020/10/17 Python
用python对excel进行操作(读,写,修改)
2020/12/25 Python
matplotlib交互式数据光标mpldatacursor的实现
2021/02/03 Python
主管会计岗位职责
2014/03/13 职场文书
护士求职自荐信范文
2014/03/19 职场文书
银行行长竞聘演讲稿
2014/04/23 职场文书
企业理念标语
2014/06/09 职场文书
找工作求职信
2014/07/07 职场文书
爱心捐款活动总结
2015/05/09 职场文书
一篇文章弄懂MySQL查询语句的执行过程
2021/05/07 MySQL