微信小程序用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中return false的用法
Mar 12 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
Apr 03 Javascript
每天一篇javascript学习小结(基础知识)
Nov 10 Javascript
Jquery 全选反选实例代码
Nov 19 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
Jan 04 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
Aug 01 Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
Jun 30 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
Aug 11 Javascript
vue.js响应式原理解析与实现
Jun 22 Javascript
Vue实现表格中对数据进行转换、处理的方法
Sep 06 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
Oct 29 Javascript
JavaScript控制台的更多功能
Apr 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
php sprintf()函数让你的sql操作更安全
2008/07/23 PHP
PHP 压缩文件夹的类代码
2009/11/05 PHP
详解PHP中的Traits
2015/07/29 PHP
php实现在线考试系统【附源码】
2018/09/18 PHP
PHP实现小程序批量通知推送
2018/11/27 PHP
用Jquery实现多级下拉框无刷新的联动
2010/12/22 Javascript
IE下JS读取xml文件示例代码
2013/08/05 Javascript
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
学习JavaScript设计模式(继承)
2015/11/26 Javascript
jQuery版AJAX简易封装代码
2016/09/14 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
使用Xcache缓存器加速PHP网站的配置方法
2017/04/22 Javascript
react-router中的属性详解
2017/06/01 Javascript
jQuery实现右侧抽屉式在线客服功能
2017/12/25 jQuery
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
vue打包使用Nginx代理解决跨域问题
2018/08/27 Javascript
微信小程序使用gitee进行版本管理
2018/09/20 Javascript
解决webpack+Vue引入iView找不到字体文件的问题
2018/09/28 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
2018/11/19 Javascript
在Vue中实现随hash改变响应菜单高亮
2020/03/09 Javascript
JavaScript随机数的组合问题案例分析
2020/05/16 Javascript
vue实现移动端项目多行文本溢出省略
2020/07/29 Javascript
[02:17]DOTA2亚洲邀请赛 RAVE战队出场宣传片
2015/02/07 DOTA
[01:20]2018DOTA2亚洲邀请赛总决赛战队Mineski晋级之路
2018/04/07 DOTA
python调用新浪微博API项目实践
2014/07/28 Python
python实现数独算法实例
2015/06/09 Python
更换Django默认的模板引擎为jinja2的实现方法
2018/05/28 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
2020/02/25 Python
CSS3实现千变万化的文字阴影text-shadow效果设计
2016/04/26 HTML / CSS
英国最受欢迎的手表网站:Watch Shop
2016/10/21 全球购物
香蕉共和国Banana Republic官网:美国GAP旗下偏贵族风格服饰品牌
2016/11/21 全球购物
上海微创软件面试题
2012/06/14 面试题
机关作风建设自查报告
2014/10/22 职场文书
欠条格式范本
2015/07/03 职场文书
pycharm代码删除恢复的方法
2021/06/26 Python