微信小程序用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 相关文章推荐
JavaScript中yield实用简洁实现方式
Jun 12 Javascript
使用js正则控制input标签只允许输入的值
Jul 29 Javascript
使用js实现雪花飘落效果
Aug 26 Javascript
举例说明如何为JavaScript的方法参数设置默认值
Nov 17 Javascript
JS中用childNodes获取子元素换行会产生一个子元素
Dec 08 Javascript
Angular动态添加、删除输入框并计算值实例代码
Mar 29 Javascript
xmlplus组件设计系列之选项卡(Tabbar)(5)
May 03 Javascript
node中的session的具体使用
Sep 14 Javascript
详解使用React制作一个模态框
Mar 14 Javascript
深入探索VueJS Scoped CSS 实现原理
Sep 23 Javascript
Vue data的数据响应式到底是如何实现的
Feb 11 Javascript
vue实现五子棋游戏
May 28 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
PHP4 与 MySQL 交互使用
2006/10/09 PHP
生成静态页面的PHP类
2006/11/25 PHP
php中文繁体和简体相互转换的方法
2015/03/21 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
jQuery 1.5最新版本的改进细节分析
2011/01/19 Javascript
Seajs的学习笔记
2014/03/04 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
js记录点击某个按钮的次数-刷新次数为初始状态的实例
2017/02/15 Javascript
js弹性势能动画之抛物线运动实例详解
2017/07/27 Javascript
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
node后端服务保活的实现
2019/11/10 Javascript
javascript实现左右缓动动画函数
2020/11/25 Javascript
Python爬虫框架Scrapy实战之批量抓取招聘信息
2015/08/07 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
Python实现爬虫从网络上下载文档的实例代码
2018/06/13 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
Python实现求两个数组交集的方法示例
2019/02/23 Python
Python实现定时执行任务的三种方式简单示例
2019/03/30 Python
python实现微信每日一句自动发送给喜欢的人
2019/04/29 Python
Python列表切片常用操作实例解析
2020/03/10 Python
python爬虫基础之urllib的使用
2020/12/31 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
Kingsoft金山公司C/C++笔试题
2016/05/10 面试题
提高EJB性能都有哪些技巧
2012/03/25 面试题
EJB的角色和三个对象
2015/12/31 面试题
银行营业厅大堂经理岗位职责
2014/01/06 职场文书
护士自我鉴定怎么写
2014/02/07 职场文书
高中毕业生的个人自我评价
2014/02/21 职场文书
网络编辑职责
2014/03/01 职场文书
食堂采购员岗位职责
2014/03/17 职场文书
市场策划求职信
2014/08/07 职场文书
感恩教师节主题班会
2015/08/12 职场文书
解决Golang中goroutine执行速度的问题
2021/05/02 Golang
《艾尔登法环》Boss腐烂树灵很有可能是《黑暗之魂3》的一个废案
2022/04/11 其他游戏