微信小程序用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 相关文章推荐
FF IE兼容性的修改小结
Sep 02 Javascript
jquery多行滚动/向左或向上滚动/响应鼠标实现思路及代码
Jan 23 Javascript
基于dom编程中 动态创建与删除元素的使用
Apr 17 Javascript
Jquery 模板数据绑定插件的使用方法详解
Jul 08 Javascript
一款jquery特效编写的大度宽屏焦点图切换特效的实例代码
Aug 05 Javascript
Javascript之this关键字深入解析
Nov 12 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
Oct 17 Javascript
JS验证 只能输入小数点,数字,负数的实现方法
Oct 07 Javascript
用js制作淘宝放大镜效果
Oct 28 Javascript
微信小程序 图片上传实例详解
May 05 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
Jul 23 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
Feb 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
后宫无数却洁身自好的男主,唐三只爱小舞
2020/03/02 国漫
PHP连接局域网MYSQL数据库的简单实例
2013/08/26 PHP
php inc文件使用的风险和注意事项
2013/11/12 PHP
php发送http请求的常用方法分析
2016/11/08 PHP
window.open()弹出居中的窗口
2007/02/01 Javascript
jQuery编写widget的一些技巧分享
2010/10/28 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
JavaScript汉诺塔问题解决方法
2015/04/21 Javascript
基于javascript实现单选及多选的向右和向左移动实例
2015/07/25 Javascript
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
JS类的定义与使用方法深入探索
2016/11/26 Javascript
React学习笔记之事件处理(二)
2017/07/02 Javascript
浅谈vue-lazyload实现的详细过程
2017/08/22 Javascript
node.js自动上传ftp的脚本分享
2018/06/16 Javascript
jQuery实现表格隔行换色
2018/09/01 jQuery
node.js使用redis储存session的方法
2018/09/26 Javascript
[03:04]DOTA2超级联赛专访ZSMJ “莫名其妙”的逆袭
2013/05/23 DOTA
pyqt和pyside开发图形化界面
2014/01/22 Python
python提取内容关键词的方法
2015/03/16 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
Python的条件锁与事件共享详解
2019/09/12 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
python滑块验证码的破解实现
2019/11/10 Python
Tensorflow 卷积的梯度反向传播过程
2020/02/10 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
英国广泛的照明产品网站:Lights4living
2018/01/28 全球购物
北京天润融通.net面试题笔试题
2012/02/20 面试题
数控技术学生的自我评价
2014/02/15 职场文书
2015年保险公司工作总结
2015/04/24 职场文书
仰望星空观后感
2015/06/10 职场文书
2016公司中秋节寄语
2015/12/07 职场文书
创业计划书之个人工作室
2019/08/22 职场文书
使用vue判断当前环境是安卓还是IOS
2022/04/12 Vue.js