微信小程序用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 相关文章推荐
自适应图片大小的弹出窗口
Jul 27 Javascript
JavaScript 轻松搞定快捷留言功能 只需一行代码
Apr 01 Javascript
常用一些Javascript判断函数
Aug 14 Javascript
JQuery包裹DOM节点的方法
Jun 11 Javascript
JQuery实现图片轮播效果
Sep 15 Javascript
jQuery fadeOut 异步实例代码详解
Aug 18 Javascript
JavaScript之cookie技术详解
Nov 18 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
May 01 Javascript
Express系列之multer上传的使用
Oct 27 Javascript
微信小程序动画组件使用解析,类似vue,且更强大
Aug 01 Javascript
解决vue自定义全局消息框组件问题
Nov 22 Javascript
Vue实现开关按钮拖拽效果
Sep 22 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生成静态页面的简单示例
2014/04/17 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
jquery实现通用版鼠标经过淡入淡出效果
2014/06/15 Javascript
Jquery节点遍历next与nextAll方法使用示例
2014/07/22 Javascript
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
js获取微信版本号的方法
2015/05/12 Javascript
jQuery调用WebMethod(PageMethod) NET2.0的方法
2016/04/15 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
利用JS对iframe父子(内外)页面进行操作的方法教程
2017/06/15 Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
2018/05/23 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
详解小程序开发经验:多页面数据同步
2019/05/18 Javascript
使用apifm-wxapi模块中的问题及解决方法
2019/08/05 Javascript
vue柱状进度条图像的完美实现方案
2019/08/26 Javascript
ElementUI之Message功能拓展详解
2019/10/18 Javascript
vue 动态表单开发方法案例详解
2019/12/02 Javascript
详解JavaScript 异步编程
2020/07/13 Javascript
[01:08:24]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第一场 2月5日
2021/03/11 DOTA
详解TensorFlow在windows上安装与简单示例
2018/03/05 Python
python3.6实现学生信息管理系统
2019/02/21 Python
python如何以表格形式打印输出的方法示例
2019/06/21 Python
django 微信网页授权登陆的实现
2019/07/30 Python
Python容器使用的5个技巧和2个误区总结
2019/09/26 Python
Python如何使用argparse模块处理命令行参数
2019/12/11 Python
pyenv虚拟环境管理python多版本和软件库的方法
2019/12/26 Python
python实现的分层随机抽样案例
2020/02/25 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
python 制作本地应用搜索工具
2021/02/27 Python
使用placeholder属性设置input文本框的提示信息
2020/02/19 HTML / CSS
黄继光的英雄事迹材料
2014/02/13 职场文书
六查六看心得体会
2014/10/14 职场文书
让生命充满爱观后感
2015/06/08 职场文书
儿子满月酒致辞
2015/07/29 职场文书
Python使用UDP实现720p视频传输的操作
2021/04/24 Python
python​格式化字符串
2022/04/20 Python