微信小程序用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跑马灯悬停放大效果实现代码
Dec 12 Javascript
JavaScript编写连连看小游戏
Jul 07 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
Mar 01 Javascript
jQuery实现简单滚动动画效果
Apr 07 Javascript
js中删除数组中的某一元素实例(无下标时)
Feb 28 Javascript
基于js 字符串indexof与search方法的区别(详解)
Dec 04 Javascript
详解AngularJS之$window窗口对象
Jan 17 Javascript
Vue2.0子同级组件之间数据交互方法
Feb 28 Javascript
解决vuex刷新状态初始化的方法实现
Aug 15 Javascript
基于js实现判断浏览器类型代码实例
Jul 17 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
Nov 16 Javascript
在Vue中使用CSS3实现内容无缝滚动的示例代码
Nov 27 Vue.js
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 分页分组类
2009/12/10 PHP
6种php上传图片重命名的方法实例
2013/11/04 PHP
php实现的mongodb操作类实例
2015/04/03 PHP
typecho插件编写教程(二):写一个新插件
2015/05/28 PHP
php下载文件超时时间的设置方法
2016/10/06 PHP
用js实现的页面关键字密度查询代码
2007/12/27 Javascript
js jquery验证银行卡号信息正则学习
2013/01/21 Javascript
jquery 循环显示div的示例代码
2013/10/18 Javascript
获取非最后一列td值并将title设为该值的方法
2013/10/30 Javascript
jQuery 1.9使用$.support替代$.browser的使用方法
2014/05/27 Javascript
jQuery创建DOM元素实例解析
2015/01/19 Javascript
jquery mobile界面数据刷新的实现方法
2016/05/28 Javascript
JavaScript 拖拽实例代码
2016/09/21 Javascript
jQuery grep()方法详解及实例代码
2016/10/30 Javascript
vue获取dom元素注意事项
2017/12/28 Javascript
深入理解NodeJS 多进程和集群
2018/10/17 NodeJs
mpvue全局引入sass文件的方法步骤
2019/03/06 Javascript
Element Collapse 折叠面板的使用方法
2020/07/26 Javascript
Vue实现一种简单的无限循环滚动动画的示例
2021/01/10 Vue.js
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
在Python中使用成员运算符的示例
2015/05/13 Python
tensorflow: 查看 tensor详细数值方法
2018/06/13 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
python学生信息管理系统实现代码
2019/12/17 Python
Python装饰器结合递归原理解析
2020/07/02 Python
python 如何读、写、解析CSV文件
2021/03/03 Python
《中华少年》教学反思
2014/02/15 职场文书
小学学校评估方案
2014/06/08 职场文书
2014个人反腐倡廉思想汇报
2014/09/15 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
商业计划书范文
2019/04/24 职场文书
Python Pandas知识点之缺失值处理详解
2021/05/11 Python
Python打包exe时各种异常处理方案总结
2021/05/18 Python
vite+vue3.0+ts+element-plus快速搭建项目的实现
2021/06/24 Vue.js
MySQL 5.7常见数据类型
2021/07/15 MySQL