家政预约小程序09小程序分享及海报分享

news2024/11/16 21:46:40

目录

  • 1 设置弹窗
  • 2 制作海报
  • 总结

上一篇我们介绍了服务详情页面的开发,本篇介绍一下用户分享及海报分享的功能

1 设置弹窗

当用户点击分享按钮的时候,系统弹出弹窗界面,提供分享好友及分享海报的选项。选中页面组件,添加弹窗组件
在这里插入图片描述
关闭底部按钮显示
在这里插入图片描述
修改弹窗的标题为用户分享
在这里插入图片描述
在弹窗内容里添加小程序分享组件
在这里插入图片描述
设置宽100%,高40px
在这里插入图片描述
选择服务详情页面
在这里插入图片描述
打开携带参数配置,参数配置为如下表达式

[
  {
    "key": "id",
    "value": $w.page.dataset.params.id
  }
]

关闭默认打开弹窗配置
在这里插入图片描述
给按钮设置点击事件,点击的时候打开弹窗
在这里插入图片描述
在这里插入图片描述

2 制作海报

海报制作的话,先需要制作底图,我们先准备好我们的背景图和小程序的二维码,然后切换到素材管理,将我们的图片进行上传
在这里插入图片描述
在点击海报分享按钮的时候需要再弹出一个弹窗,里边放置我们的canvas组件和按钮,点击按钮可以将图片下载到手机里

在这里插入图片描述

在代码区新建一个javascript方法,里边输入如下内容
在这里插入图片描述

export default async function ({ event, data }) {
    
    $w.utils.showLoading({
        title: "加载中",
        mask: false,
    })
    //获取canvas实例和上下文
    const canvas = $w.canvas1.canvasInstance
    const ctx = $w.canvas1.canvasCtx
    //获取可视窗口的宽高
    const width = $w.device.viewport.width
    const height = $w.device.viewport.height
    //获取设备像素比
    let dpr = wx.getWindowInfo().pixelRatio
    if (ctx && canvas && $w.canvas1?.type === '2d') {
        // 清空画布
        ctx.clearRect(0, 0, width, height)
        //初始化画布大小、画布的最终大小需要按设备像素比进行转换、
        canvas.width = width * dpr
        canvas.height = height * dpr
        ctx.scale(dpr, dpr)
        //ctx.fillStyle = "rgb(246, 248, 251,0)";
        //ctx.fillRect(0, 0, canvas.width, canvas.height)
        //准备好的poster图片和二维码图片
        let posterMoudleImg = 'https://lowcode-9g6zlcz504383ac8-1305601167.tcloudbaseapp.com/resources/2024-05/lowcode-1824729'
        let codeImg = 'https://lowcode-9g6zlcz504383ac8-1305601167.tcloudbaseapp.com/resources/2024-05/lowcode-1824572'
        //获取海报图片的尺寸
        let posterImgInfo = await new Promise((reslove) => {
            wx.getImageInfo({
                src: posterMoudleImg,
                success(res) {
                    reslove(res);
                }
            })
        })
        // 计算出新的图片宽高(此处以宽为基准,按90%的宽等比例缩放图片)
        let posterImgRate = posterImgInfo.width / posterImgInfo.height
        let posterWidth = 0.9 * width
        let posterHeight = posterWidth / posterImgRate
        //获取poster图片信息
        let posterImg = canvas.createImage()
        posterImg.src = posterMoudleImg
        posterImg.onload = async () => {
            //绘制海报底图
            let x_position = (width - posterWidth) / 2, y_position = 20
            ctx.drawImage(posterImg, x_position, y_position, posterWidth, posterHeight)
            const qrcodeImg = canvas.createImage()
            qrcodeImg.src = codeImg
            qrcodeImg.onload = async () => {
                ctx.drawImage(qrcodeImg, 0.75 * posterWidth, 0.83 * posterHeight, posterWidth / 4, posterWidth / 4)
            }
            
            if ($w.wedaContext.platforms.includes('MP')) {
                setTimeout(() => {
                    ctx.draw(true, wx.canvasToTempFilePath(
                        {
                            x: x_position,   // 指定的画布区域的左上角横坐标
                            y: y_position,       // 指定的画布区域的左上角纵坐标
                            width: width - x_position * dpr * 2,     // 指定的画布区域的宽度
                            height: (width - x_position * dpr * 2) / posterImgRate,   // 指定的画布区域的高度
                            destWidth: (width - x_position * dpr * 2) * dpr, // 输出的图片的宽度
                            destHeight: (width - x_position * dpr * 2) / posterImgRate * dpr, // 输出的图片的高度
                            canvas: canvas,
                            //quality: 1,
                            success(res) {
                                $w.page.setState({ "tempFilePath": res.tempFilePath }) //将图片临时路径保存到自定义变量tempFilePath
                                //console.log($w.page.dataset.state.tempFilePath)
                            },
                            fail(res) {
                                console.log('error')
                                $w.utils.showToast({
                                    title: "保存失败", // 提示的内容,
                                    icon: "error", // 图标,
                                    duration: 2000, // 延迟时间,
                                    mask: true, // 移动端是否显示透明蒙层(移动端显示透明蒙层可以防止触摸穿透,PC 端不受此配置影响)
                                })
                            },
                            complete(res) {
                                //console.log(res)
                                $w.utils.hideLoading();
                            }
                        })
                    )
                }, 1500)
            }
        }
    }
}

只需要替换一下底图和二维码的地址,我们在素材里复制图片的地址,填充到对应位置
在这里插入图片描述

然后再创建一个javascript方法,用来下载生成后的图片

export default function savePoster() {
     wx.saveImageToPhotosAlbum({
        filePath: $w.page.dataset.state.tempFilePath, //图片临时路径
        success(res) {
            $w.utils.showToast({
                title: "保存成功", // 提示的内容,
                icon: "success", // 图标,
                duration: 2000, // 延迟时间,
                mask: true, // 移动端是否显示透明蒙层(移动端显示透明蒙层可以防止触摸穿透,PC 端不受此配置影响)
            });
        },
        fail(res) {
            $w.utils.showToast({
                title: "保存失败", // 提示的内容,
                icon: "error", // 图标,
                duration: 2000, // 延迟时间,
                mask: true, // 移动端是否显示透明蒙层(移动端显示透明蒙层可以防止触摸穿透,PC 端不受此配置影响)
            });
        }
    })
}

在这里插入图片描述
这两段代码来源于官方文档

https://cloud.tencent.com/document/product/1301/103698

代码写好后需要让代码生效,选中canvas组件,先清空我们的初始化代码
在这里插入图片描述
然后设置canvas渲染完成时的事件
在这里插入图片描述
选中我们的按钮,设置点击事件,选择我们的下载方法
在这里插入图片描述
设置好之后,设置我们在点击分享的时候的弹窗,里边的第二个按钮,我们设置点击事件为打开我们的第二个弹窗组件
在这里插入图片描述
在这里插入图片描述

总结

本篇我们介绍了分享好友及海报分享的功能,分享好友主要设置基础属性就可以。海报设置不复杂,官方已经把代码都写好了,不过要读懂代码恐怕还是要有一定的基本功才行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1717089.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ReDos攻击浅析

DOS为拒绝服务攻击,re则是由于正则表达式使用不当,陷入正则引擎的回溯陷阱导致服务崩溃,大量消耗后台性能 正则 ​ 探讨redos攻击之前,首先了解下正则的一些知识 执行过程 大体的执行过程分为: 编译 -> 执行编译过程中&…

ROS2从入门到精通2-1:launch多节点启动与脚本配置

目录 0 专栏介绍1 ROS2的启动脚本优化2 ROS2多节点启动案例2.1 C架构2.2 Python架构 3 其他格式的启动文件3.1 .yaml启动3.2 .xml启动 0 专栏介绍 本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的…

Redis 中的 Zset 数据结构详解

目录 用法 1. 增 2. 删 3. 查 4. 交,并 编码方式 应用场景 Redis 中的 Zset(有序集合)是一种将元素按照分数进行排序的数据结构。与上篇写的SetRedis 中的 Set 数据结构详解不同,Zset 中的每个元素都关联一个浮点数类型的…

QT C++ 基于word模板 在书签位置写入文字和图片

如果你有按模版批量自动化操作word文件的需求,那么本文能给你一定的帮助。 它能满足你程序自动化生成报表的需求。常常用于上位机、测试仪器的软件中。 需要你你自己做个word模版文档,添加2个书签。点按钮,会按照你的模板文档生成一个同样的…

如何使用 Midjourney 进行 UI/UX 设计

图片由Midjourney创建 UI/UX 设计中的 AI 艺术彻底改变了游戏规则,开辟了惊人的可能性。Midjourney 可以在几秒钟内启动大量设计选项,让您的工作变得更轻松、更快捷。 在本文中,我将向您展示一些为 UI/UX 设计创建 AI 艺术的技巧。 要事第…

TH方程学习(3)

一、编程实现 根据论文给出的案例&#xff0c;使用TH方程进行数值仿真 1.初始化条件 %% 参考文献<New State Transition Matrix for Relative Motion on an Aribitrary Elliptical Orbit> %% 作者 Yamanaka Koji clc;clear global miu Re miu 3.986e5; Re 6378.137;…

数据挖掘与机器学习——关联规则与协同过滤

目录 推荐算法的目的 如何进行推荐&#xff1a; 关联规则 关联规则挖掘&#xff1a; 应用&#xff1a; 案例&#xff1a;啤酒与尿布 定义&#xff1a; 关联规则的度量&#xff1a; 支持度 置信区间 度量 关联规则挖掘 定义 步骤 apriori算法 定律&#xff1a; …

「手把手prompt1」相关介绍

「手把手prompt1」相关介绍 在人工智能领域迅速发展的当下&#xff0c;“prompt” 这个术语正逐渐成为焦点。本文将带您深入了解prompt的本质&#xff0c;以及它如何影响我们与AI系统的互动。您将学习到&#xff0c;通过精确的指令设计&#xff0c;可以引导AI系统产出精确和有…

GEYA格亚GRT8-M多种功能时间继电器交流AC220V DC24V延时断开小巧

品牌 GEYA 型号 GRT8-M1 AC/DC12-240 产地 中国大陆 颜色分类 GRT8-M1 A220,GRT8-M1 AC/DC12-240,GRT8-M2 A220,GRT8-M2 AC/DC12-240 GRT8-M&#xff0c;多功能型&#xff0c;时间继电器&#xff1a;LED指示灯&#xff0c;触头容量大&#xff0c;电压超宽&#xff0c;阻…

Ollama本地运行 Codestral-22B-v0.1

Ollama本地运行 Codestral-22B-v0.1 0. 引言1. 运行 codestral:22b-v0.1-q8_02. 简单测试下它的代码能力 0. 引言 Mixtral 5月30日发布了 Codestral-22B-v0.1。 Codestrall-22B-v0.1 在 80 多种编程语言的多样化数据集上进行训练&#xff0c;包括最流行的语言&#xff0c;例如…

3. MySQL 数据表的基本操作

文章目录 【 1. MySQL 创建数据表 】【 2. MySQL 查看表 】2.1 DESCRIBE/DESC 以表格的形式展示表2.2 SHOW CREATE TABLE 以SQL语句的形式展示表 【 3. MySQL 修改数据表 】3.1 修改表名3.2 修改表字符集3.3 添加字段在末尾添加字段在开头添加字段在中间添加字段 3.3 修改/删除…

【多线程开发 3】从源码到实践CompletableFuture

【多线程开发 3】从源码到实践CompletableFuture 2024年5月22日 本文将从以下几个点讲解CompletableFuture&#xff1a; 前身 是什么&#xff1f; 可以用来做什么&#xff1f; 源码原理 实战 其他包装类 前身 CompletableFuture的依赖如图所示&#xff1a; 所以我打…

二叉树的顺序结构及实现(堆的实现)

一.二叉树的顺序结构&#xff1a; 普通的二叉树是不适合用数组来存储的&#xff0c;因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆 ( 一种二叉树 ) 使用顺序结构的数组来存储&#xff0c;需要注意的是这里的堆和操作系统 虚拟进程地址…

C++入门3——类与对象2(类的6个默认成员函数)

目录 1.类的6个默认成员函数 2. 构造函数 2.1 构造函数的概念 2.2 构造函数的特性 3. 析构函数 3.1 析构函数的概念 3.2 析构函数的特性 4.拷贝构造函数 4.1 拷贝构造函数的概念 4.2 拷贝构造函数的特性 5.赋值运算符重载函数 5.1运算符重载函数 5.2 赋值运算符重…

探索文档解析技术,推动大模型训练与应用

探索文档解析技术&#xff0c;推动大模型训练与应用 0. 前言1. CCIG 20241.1 会议简介1.2 大模型技术及其前沿应用论坛1.3 走进合合信息 2. 大模型时代2.1 大模型的发展与应用2.2 大模型面临的挑战 3. 文档解析技术3.1 文档解析技术难点3.2 TextIn 文档解析算法流程 4. 大模型时…

UE5 Http Server

前言 最近要用UE 作为一个服务器去接收来自外部的请求&#xff0c;从而在UE中处理一些内容&#xff0c;但是之前只做过请求&#xff0c;哪整过这玩意&#xff0c;短期内还得出结果&#xff0c;那怎么搞嘞&#xff0c;本着省事的原则就找找呗&#xff0c;有没有现成的&#xff0…

【基础算法总结】位运算

位运算 1.基础位运算2.常见用法总结3.面试题 01.01. 判定字符是否唯一4.丢失的数字5.两整数之和6.只出现一次的数字 II7.面试题 17.19. 消失的两个数字 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励…

CCIG 2024:合合信息文档解析技术突破与应用前景

目录 背景当前大模型训练和应用面临的问题训练Token耗尽训练语料质量要求高LLM文档问答应用中文档解析不精准 合合信息的文档解析技术1. 具备多文档元素识别能力2. 具备版面分析能力3. 高性能的文档解析4. 高精准、高效率的文档解析文档多板式部分示例 文档解析典型技术难点元素…

Go Modules 使用

文章参考https://blog.csdn.net/wohu1104/article/details/110505489 不使用Go Modules&#xff0c;所有的依赖包都是存放在 GOPATH /pkg下&#xff0c;没有版本控制。如果 package 没有做到完全的向前兼容&#xff0c;会导致多个项目无法运行(包版本需求不同)。 于是推出了g…

JVM学习-类加载过程(一)

概述 在Java中数据类型分为基本数据类型和引用数据类型&#xff0c;基本数据类型由虚拟机预先定义&#xff0c;引用数据类型则需要进行类的加载按Java虚拟机规范&#xff0c;从class文件加载到内存中的类&#xff0c;到类卸载出内存为止&#xff0c;它的整个生命周期包含以下7…