微信小程序用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 相关文章推荐
让任务管理器中的CPU跳舞的js代码
Nov 01 Javascript
JSON 入门指南 想了解json的朋友可以看下
Aug 26 Javascript
javascript cookie操作类的实现代码小结附使用方法
Jun 02 Javascript
工作中常用到的JS表单验证代码(包括例子)
Nov 11 Javascript
jquery.boxy弹出框(后隔N秒后自动隐藏/自动跳转)
Jan 15 Javascript
JavaScript表达式:URL 协议介绍
Mar 10 Javascript
原生JS实现图片左右轮播
Dec 30 Javascript
jQuery实现标签页效果实战(4)
Feb 08 Javascript
vue实现todolist单页面应用
Apr 11 Javascript
webpack进阶——缓存与独立打包的用法
Aug 02 Javascript
js实现随机点名小功能
Aug 17 Javascript
Vue前端判断数据对象是否为空的实例
Sep 02 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
用php来限制每个ip每天浏览页面数量的实现思路
2015/02/24 PHP
PHP实现文字写入图片功能
2019/02/18 PHP
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
JavaScript 无符号右移赋值操作
2009/04/17 Javascript
JS获取html对象的几种方式介绍
2013/12/05 Javascript
深入理解Javascript里的依赖注入
2014/03/19 Javascript
jQuery+css3实现Ajax点击后动态删除功能的方法
2015/08/10 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
2015/10/20 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
Javascript动画效果(1)
2016/10/11 Javascript
jquery easyui validatebox remote的使用详解
2016/11/09 Javascript
js中的触发事件对象event.srcElement与event.target详解
2017/03/15 Javascript
JS ES6多行字符串与连接字符串的表示方法
2017/04/26 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
原生JS实现Ajax跨域请求flask响应内容
2017/10/24 Javascript
thinkjs 文件上传功能实例代码
2017/11/08 Javascript
jQuery实现合并表格单元格中相同行操作示例
2019/01/28 jQuery
浅谈vuex中store的命名空间
2019/11/08 Javascript
微信小程序 button样式设置为图片的方法
2020/06/19 Javascript
[01:01:24]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
介绍Python中的fabs()方法的使用
2015/05/14 Python
django基础之数据库操作方法(详解)
2017/05/24 Python
Flask框架使用DBUtils模块连接数据库操作示例
2018/07/20 Python
PyQt5实现简易电子词典
2019/06/25 Python
python3用PIL把图片转换为RGB图片的实例
2019/07/04 Python
flask应用部署到服务器的方法
2019/07/12 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
python实现矩阵和array数组之间的转换
2019/11/29 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
详解python tcp编程
2020/08/24 Python
大学毕业自我评价
2014/02/02 职场文书
文明班级建设方案
2014/05/15 职场文书
学前班学生评语
2014/12/29 职场文书
驳回起诉民事裁定书
2015/05/19 职场文书
地道战观后感400字
2015/06/04 职场文书
幼儿园卫生保健制度
2015/08/05 职场文书