小程序自定义分享卡片

在微信小程序项目开发中,有将分享卡片,发送到微信群或者发送给个人的需求


文章目录

  • 小程序自定义分享卡片
  • 前言
  • 一、分享功能介绍
  • 二、代码实现
    • 1.实现思路一
    • 2.实现思路二
  • 总结

前言

简要描述

(1)在小程序中点击“跳转微信”,去微信分享卡片

(2)分享卡片效果

此处可以分享至微信群或者微信好友,点击卡片即可跳转到微信小程序指定页面


一、分享功能介绍

小程序的分享有自己的机制,在页面点击右上角,或者页面中的button 采用open-type=share方式也可以触发onShareAppMessage方法。


二、代码实现

此处讲述的是卡片自定义内容,若无需自定义的话直接将参数imageUrl配置为固定路径即可。

1.实现思路一

中间预览页面,将预览页面动态渲染,自动截屏,实现自定义卡片内容及内容的动态渲染

上代码,

wxml

<button class="upinfo" data-name="shareBtnfriend" open-type="share">跳转微信</button>

js

  let that = thislet openid = app.globalData.open_idlet urldataif (res.target.dataset.name == "shareBtnfriend") {//转发微信-好友urldata = '/pages/friendComment/friendComment?type=1&states=' + that.data.states + '&openid=' + openid + '&id=' + that.data.id} else if (res.target.dataset.name == "shareBtngroup") {//转发微信-群urldata = '/pages/friendComment/friendComment?type=2&states=' + that.data.states + '&openid=' + openid + '&id=' + that.data.id}return {title: '我的小可爱', // 转发标题path: urldata, // 必须是以 / 开头的完整路径imageUrl: '',}},

此处imageUrl我们没有配置参数,使用默认当前预览页面的截图,当前预览页面动态渲染

2.实现思路二

canvas生成图片,在分享逻辑中,将canvas生成的图片返,并配置到return的imageUrl参数中

上代码,

canvas画图封装并暴露

function fillTextToCanvas(cxt, text, beginWidth, beginHeight) {const lineLength = 24;// 行高let item = '';let count = 0;const stringLength = text.length;const newText = text.split('');const context = cxt;let beginHeightNew = beginHeight;context.textAlign = 'left';for (let i = 0; i <= stringLength; i++) {if (count === 15) { // count一行显示多少个字context.fillText(item, beginWidth, beginHeightNew);beginHeightNew += lineLength;item = '';count = 0;}if (i === stringLength) {context.fillText(item, beginWidth, beginHeightNew);item = '';count = 0;}item += newText[0];count += 1;newText.shift();}
}
//  canvas绘制文字自动换行
function drawLongText(longText, cxt, beginWidth, beginHeight) {const lines = longText.split('\n');const linesLen = lines.length;const lineLength = 24;// 行高if (linesLen >= 0) {for (let t = 0; t < linesLen; t++) {const beginHeightNew = beginHeight + lineLength * t;fillTextToCanvas(cxt, lines[t], beginWidth, beginHeightNew);}}
}// 绘制分享图片
function createSharePicUrl(self, avatar, nickname, college, content, callback) {const shareCtx = wx.createCanvasContext('shareCanvas', self);shareCtx.rect(0, 0, 250, 200);shareCtx.setFillStyle('white');// 画头部个人信息wx.downloadFile({url: avatar,success(res) {const avatarWidth = 40; // 绘制的头像宽度const avatarHeight = 40; // 绘制的头像高度const avatarX = 12; // 绘制的头像在画布上的位置const avatarY = 15; // 绘制的头像在画布上的位置shareCtx.save();shareCtx.beginPath(); // 开始绘制// 先画个圆   前两个参数确定了圆心 (x,y) 坐标  第三个参数是圆的半径  四参数是绘图方向  默认是false,即顺时针shareCtx.arc(avatarWidth / 2 + avatarX,avatarHeight / 2 + avatarY,avatarWidth / 2,0,Math.PI * 2,false);shareCtx.clip();shareCtx.drawImage(res.tempFilePath,avatarX, avatarY,avatarWidth,avatarHeight); // 推进去图片,必须是https图片shareCtx.restore(); // 恢复之前保存的绘图上下文 恢复之前保存的绘图上下午即状态 还可以继续绘制// 画中间帖子内容shareCtx.setTextAlign('left'); // 文字居中shareCtx.setFillStyle('#333333');shareCtx.setFontSize(15); // 文字字号:15pxshareCtx.fillText(nickname, 64, 31, 100);shareCtx.setFillStyle('#999999');shareCtx.setFontSize(12); // 文字字号:12pxshareCtx.fillText(college, 64, 52, 100);shareCtx.setFillStyle('#070707');shareCtx.setFontSize(15); // 文字字号:15pxdrawLongText(content, shareCtx, avatarX, 75 + 10);shareCtx.draw(false, setTimeout(callback, 200));},});
}
module.exports = {drawLongText,createSharePicUrl,
};

引入,

const createSharePic = require('../../utils/createSharePic');

生成图片并保存,

createSharePic.createSharePicUrl(this,item.avatar,item.nickname,item.collegeName,item.body, () => {wx.canvasToTempFilePath({canvasId: 'shareCanvas',x: 0,y: 0,width: 250,height: 200,success(res) {console.log(res.tempFilePath);that.setData({sharePicUrl: res.tempFilePath,});},}, that);});

将图片res.tempFilePath的路径直接配置即可

总结

两种方实现思路,玩转小程序自定义卡片分享

文章参考:https://blog.csdn.net/m0_37792830/article/details/90260073

站在巨人肩膀上的自我总结

小程序自定义分享卡片相关推荐

  1. 小程序自定义分享事件及回调函数

    定义函数 在页面的js文件中定义 onShareAppMessage 函数时,表示该页面可以进行转发.可以在函数中设置页面转发的信息. 只有定义了该函数,小程序右上角的菜单中才会有转发按钮 用户点击转 ...

  2. 微信小程序自定义分享标题和图片

    微信小程序当中有两种分享的方式 1.按钮方式<button open-type="share"></button> 2.右上方的"..." ...

  3. uniapp小程序自定义分享按钮

    1.代码如下 <button class="w100 h100 btn-collection inline-block" open-type="share" ...

  4. 微信小程序自定义分享功能开发笔记

    要在分享的页面中定义onShareAppMessage 方法,只有定义了此事件处理函数,右上角菜单才会显示"转发"按钮 onShareAppMessage触发方式有两种,一种是通过 ...

  5. 微信小程序自定义分享按钮

    1.声明 onShareAppMessage 函数   onShareAppMessage() { return { title: '弹出分享时显示的分享标题' desc: '分享页面的内容', pa ...

  6. uniapp微信小程序自定义分享按钮

    1.在 manifest.json 的 App SDK 配置里,勾选微信消息及朋友圈并填写相关微信 appkey. 2. 代码里面调用: <button class="w100 h10 ...

  7. 微信小程序封装分享与分销功能

    在微信小程序中,可以很简单的分享一个页面,比微信H5简单多了,然而,分享出去的页面(也叫卡片),打开后只是一个单独的页面,没有底部导航栏,点击返回按钮的时候就直接退出小程序了.如果需要去到首页,还必须 ...

  8. android分享朋友圈功能,微信小程序实现分享至朋友圈的功能来啦

    微信小程序「分享至朋友圈」能力,终于来了!(之前,我相信大部分微信小程序的开发者都是用"分享卡片"的形式,手动调用wx.createCanvasContext生成一张图片,让用户生 ...

  9. 小程序分享到朋友圈功能_微信小程序开放分享到朋友圈功能

    2020年7月7日(据说是6日深夜),一个很特别的日子,微信低调地放开了一个功能:微信小程序"分享到到朋友圈",这个看似微小的变化,对微信小程序来说意义重大. 用fenng大的话说 ...

最新文章

  1. linux下备份mysql上传到网盘_Linux命令行上传文件到百度网盘
  2. Properties持久的属性集
  3. 基于视觉惯性里程计的无监督深度补全方法
  4. pp模块中关于物料反冲的探讨
  5. mysql修改字段非必输_mysql有些字段是非必填的,传空要查所有数据该怎么处理?...
  6. 将整数m的各位数字保存到数组A中
  7. 三星是android吗,三星 Galaxy Camera(三星安卓相机)
  8. sqlite遇到database is locked问题的完美解决
  9. 记录——《C Primer Plus (第五版)》第十章编程练习第一题
  10. mysql导出一行数据类型_MySQL 导出数据
  11. linux db2 64位下载,DB2(Linux 64位)安装教程
  12. modelsim/Questasim中添加xilinx ip库,并仿真成功
  13. 作业盒子小学版android,作业盒子小学生官方版
  14. WEB前端2020年更新实用代码段(持续更新)
  15. Elasticsearch入门教程(五):Elasticsearch查询(一)
  16. 使用tushare获取股票数据并计算历史概念板块的平均涨跌幅
  17. 短信链接跳转微信小程序(URLSchema等)
  18. 用Python基础创建一个简单的注册登录系统
  19. 真我realme V11realmeQ3I root解锁BL 刷magisk MTK 安卓11 root教程 救砖
  20. 海尔电视android怎么设置,海尔电视怎么连接手机 海尔电视连接手机步骤

热门文章

  1. 多任务学习与深度学习
  2. 等离子体发射光谱仪的构成有哪些?
  3. 射频通信中混频器与变频器区别
  4. PaaS 以及全套服务微服务搭建流程
  5. 数据结构:十大经典排序算法
  6. 大卫谈学习4:为何你会一年经验用十年?
  7. 四自由度机械臂matlab建模与仿真
  8. unity HLSL 面片火焰Shader V0.1
  9. 微服务 tars php,TARS-PHP
  10. oracle 修改nls_nchar_characterset,NLS_NCHAR_CHARACTERSET 参数值是如何被指定的?