微信小程序用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 相关文章推荐
Textarea与懒惰渲染实现代码
Jan 04 Javascript
js实现div在页面拖动效果
May 04 Javascript
javascript css红色经典选项卡效果实现代码
May 17 Javascript
如何用js实现鼠标向上滚动时浮动导航
Jul 18 Javascript
JavaScript性能优化总结之加载与执行
Aug 11 Javascript
脚本div实现拖放功能(两种)
Feb 13 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
Jun 01 Javascript
iview Upload组件多个文件上传的示例代码
Sep 30 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
Dec 25 Javascript
如何优雅地在Node应用中进行错误异常处理
Nov 25 Javascript
简单了解Vue + ElementUI后台管理模板
Apr 07 Javascript
JQuery事件冒泡和默认行为代码实例
May 13 jQuery
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数据对象PDO操作技巧小结
2016/09/27 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
2019/03/01 PHP
iphone safari不支持position fixed的解决方法
2012/05/04 Javascript
jQuery :first选择器使用介绍
2013/08/09 Javascript
JavaScript检测上传文件大小的方法
2015/07/22 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
Javascript之面向对象--封装
2016/12/02 Javascript
快速入门Vue
2016/12/19 Javascript
微信小程序图片宽100%显示并且不变形
2017/06/21 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
2017/08/16 Javascript
Angular CLI 安装和使用教程
2017/09/13 Javascript
bootstrap treeview 扩展addNode方法动态添加子节点的方法
2017/11/21 Javascript
JavaScript设计模式之享元模式实例详解
2019/01/17 Javascript
Vue动态生成el-checkbox点击无法赋值的解决方法
2019/02/21 Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
2020/04/25 Javascript
微信小程序onShareTimeline()实现分享朋友圈
2021/01/07 Javascript
探究python中open函数的使用
2016/03/01 Python
Python 调用Java实例详解
2017/06/02 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
2018/01/10 Python
Python实现替换文件中指定内容的方法
2018/03/19 Python
Python一行代码实现快速排序的方法
2019/04/30 Python
Python依赖包迁移到断网环境操作
2020/07/13 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
解析HTML5中的新功能本地存储localStorage
2016/03/01 HTML / CSS
英国家用电器购物网站:Hughes
2018/02/23 全球购物
应届生体育教师自荐信
2013/10/03 职场文书
医院义诊活动总结
2014/07/04 职场文书
三八红旗手事迹材料
2014/12/26 职场文书
安全先进个人材料
2014/12/29 职场文书
幼儿园老师个人总结
2015/02/28 职场文书
公司备用金管理制度
2015/08/04 职场文书
小组组名及励志口号
2015/12/24 职场文书
Go语言中break label与goto label的区别
2021/04/28 Golang
2021年最新用于图像处理的Python库总结
2021/06/15 Python
Python使用MapReduce进行简单的销售统计
2022/04/22 Python