微信小程序——婚礼邀请函
一、界面设计
-
首页:
- 精美的婚礼主题背景图,可能是新人的婚纱照或浪漫的插画。
- 温馨的欢迎语,如 “欢迎参加我们的婚礼”。
- 一个 “打开邀请函” 的按钮,引导用户进入邀请函详情页面。
-
邀请函详情页面:
- 顶部展示新人的照片和名字,以及婚礼日期和地点。
- 一段浪漫的爱情故事或致辞,讲述新人的相遇相知和对未来的期待。
- 婚礼流程介绍,包括仪式时间、婚宴时间、节目安排等。
- 地图导航,提供婚礼地点的位置信息和导航链接。
- RSVP(请回复)按钮,让宾客可以方便地回复是否参加婚礼。
二、功能实现
-
数据存储与获取:
- 可以将婚礼信息存储在小程序的本地缓存或使用云开发数据库,以便在不同页面之间共享数据。
- 如果需要动态更新婚礼信息,可以通过网络请求从服务器获取最新数据。
-
页面导航:
- 在首页设置按钮点击事件,跳转到邀请函详情页面。
- 在邀请函详情页面可以设置返回首页的按钮或链接。
-
地图导航:
- 使用小程序的地图组件,展示婚礼地点的位置,并提供导航链接,方便宾客前往婚礼现场。
- 可以调用第三方地图导航 API,如腾讯地图、百度地图等,实现更精准的导航功能。
-
RSVP 功能:
- 点击 RSVP 按钮,弹出一个表单,让宾客填写姓名、联系方式、参加人数等信息。
- 将宾客的回复信息存储在本地或发送到服务器,以便新人统计参加人数。
目的
1.掌握微信小程序的开发技术,包括页面布局、交互设计、数据存储等。
2.学会运用微信小程序的各种组件和 API,实现个性化的婚礼邀请函功能。
3.通过制作婚礼邀请函小程序,提升创意设计和用户体验优化的能力。
4.了解如何在小程序中整合多媒体资源,如图片、音乐、视频等,以增强邀 请函的吸引力。
5.能够将小程序发布上线,与亲朋好友分享幸福时刻,同时熟悉小程序的发 布流程和审核要求。
流程
确定婚礼邀请函小程序的功能需求,如展示新人照片、婚礼时间地点、RSVP 功能、地图导航等。规划小程序的页面结构和交互流程,确保用户能够方便地浏览和操作。
界面设计:制作精美的页面布局,包括首页、婚礼详情页、RSVP 页面等。可以使用微信小程序提供的组件,如视图容器(view)、图片(image)、文本(text)等,进行页面搭建。
测试与优化:在开发过程中进行多次测试,确保小程序的功能正常、界面美观、交互流畅。检查兼容性问题,确保小程序在不同设备和操作系统上都能正常运行。根据测试结果进行优化,修复漏洞和改进用户体验。
代码架构
对应代码
index.wxml
<view class="player player-{{isPlayingMusic ? 'play' : 'pause'}}" bindtap="play"><image src="/images/music_icon.png" /><image src="/images/music_play.png" />
</view>
<!-- 背景图片 -->
<image class="bg" src="/images/bg_1.png" />
<!-- 内容区域 -->
<view class="content"><!-- 顶部GIF图片 --><image class="content-gif" src="/images/save_the_date.gif" /><!-- 标题 --><view class="content-title">邀请函</view><!-- 新郎和新娘的合照 --><view class="content-avatar"><image src="/images/avatar.png" /></view><!-- 新娘和新郎的名字 --><view class="content-info"><view class="content-name" bindtap="callGroom"><image src="/images/tel.png" /><view>张三石</view><view>新郎</view></view><view class="content-wedding"><image src="/images/wedding.png"></image></view><view class="content-name" bindtap="callBride"><image src="/images/tel.png" /><view>张三石的爱人</view><view>新娘</view></view></view><!-- 婚礼信息 --><view class="content-address"><view>我们诚邀您来参加我们的婚礼</view><view>时间:未来的某一天</view><view>地点:花海圆满酒店</view></view>
</view>
index.wxss
/* 音乐播放图标 */.player {position: fixed;top: 20rpx;right: 20rpx;/* 提高堆叠顺序 */z-index: 1;
}.player > image:first-child {width: 80rpx;height: 80rpx;/* 为唱片图标设置旋转动画 */animation: musicRotate 3s linear infinite;
}@keyframes musicRotate {from {transform: rotate(0deg);}to {transform: rotate(360deg);}
}.player > image:last-child {width: 28rpx;height: 80rpx;margin-left: -5px;
}/* 播放状态 class为.player-play */.player-play > image:first-child {animation-play-state: running;
}.player-play > image:last-child {animation: musicStart 0.2s linear forwards;
}/* 暂停状态 class为.player-pause */.player-pause > image:first-child {animation-play-state: paused;
}.player-pause > image:last-child {animation: musicStop 0.2s linear forwards;
}@keyframes musicStart {from {transform: rotate(0deg);}to {transform: rotate(20deg);}
}@keyframes musicStop {from {transform: rotate(20deg);}to {transform: rotate(0deg);}
}/* 背景图 */.bg {width: 100vw;height: 100vh;
}/* 内容区域 */.content {width: 100vw;height: 100vh;position: fixed;display: flex;flex-direction: column;align-items: center;
}/* 顶部gif图 */.content-gif {width: 19vh;height: 18.6vh;margin-bottom: 1.5vh;
}/* 标题 */.content-title {font-size: 5vh;color: #ff4c91;text-align: center;margin-bottom: 2.5vh;
}/* 头像 */.content-avatar image {width: 24vh;height: 24vh;border: 3px solid #ff4c91;border-radius: 50%;
}/* 新郎新娘信息 */.content-info {width: 55vw;text-align: center;margin-top: 4vh;display: flex;align-items: center;
}.content-name {color: #ff4c91;font-size: 2.7vh;line-height: 4.5vh;font-weight: bold;position: relative;
}.content-name > image {width: 2.6vh;height: 2.6vh;border: 1px solid #ff4c91;border-radius: 50%;position: absolute;top: -1vh;right: -3.6vh;
}.content-wedding {flex: 1;
}.content-wedding > image {width: 5.5vh;height: 5.5vh;margin-left: 20rpx;
}/* 婚礼信息 */.content-address {margin-top: 5vh;color: #ec5f89;font-size: 2.5vh;font-weight: bold;text-align: center;line-height: 4.5vh;
}.content-address view:first-child {font-size: 3vh;padding-bottom: 2vh;
}
map.wxml
<map latitude="{{latitude}}" longitude="{{longitude}}" markers="{{markers}}" bindmarkertap="markertap" />
map.wxss
map {width: 100vw;height: 100vh;
}
picture.wxml
<swiper indicator-color="white" indicator-active-color="#ff4c91" indicator-dots autoplay interval="3500" duration="1000" vertical circular><swiper-item wx:for="{{imgUrls}}" wx:key="*this"><image src="{{item}}" mode="aspectFill" /></swiper-item>
</swiper>
picture.wxss
swiper {height: 100vh;
}image {width: 100vw;height: 100vh;
}
腾讯视频插件,需要注册企业微信公众号(需要花钱),才可以使用,仅学习使用可忽略
video.wxml
<view class="video-list" wx:for="{{movieList}}" wx:key="user"><view class="video-title">标题:{{item.title}}</view><view class="video-time">时间:{{formatData(item.create_time)}}</view><video src="{{item.src}}" objectFit="fill"></video>
</view>
<view class="video-list"><view class="video-title">标题:腾讯视频插件演示</view><view class="video-time">时间:2019-1-1 10:11:12</view><txv-video vid="y0371c5p9cc" playerid="txv1"></txv-video>
</view>
<wxs module="formatData">module.exports = function(timestamp) {var date = getDate(timestamp)var y = date.getFullYear()var m = date.getMonth() + 1var d = date.getDate()var h = date.getHours()var i = date.getMinutes()var s = date.getSeconds()return y + '-' + m + '-' + d + ' ' + h + ':' + i + ':' + s}
</wxs>
vide.wxss
.video-list {box-shadow: 0 8rpx 17rpx 0 rgba(7, 17, 27, 0.1);margin: 10rpx 25rpx;padding: 20rpx;border-radius: 10rpx;margin-bottom: 30rpx;background: #fff;
}.video-title {font-size: 35rpx;color: #333;
}.video-time {font-size: 13px;color: #979797;
}.video-list video {width: 100%;margin-top: 20rpx;
}
配置文件
project.config.json
{"description": "项目配置文件","packOptions": {"ignore": [],"include": []},"setting": {"urlCheck": false,"es6": true,"enhance": false,"postcss": true,"preloadBackgroundData": false,"minified": true,"newFeature": true,"coverView": true,"nodeModules": false,"autoAudits": false,"showShadowRootInWxmlPanel": true,"scopeDataCheck": false,"uglifyFileName": false,"checkInvalidKey": true,"checkSiteMap": true,"uploadWithSourceMap": true,"compileHotReLoad": false,"useMultiFrameRuntime": true,"useApiHook": true,"useApiHostProcess": true,"babelSetting": {"ignore": [],"disablePlugins": [],"outputPath": ""},"enableEngineNative": false,"bundle": false,"useIsolateContext": true,"useCompilerModule": true,"userConfirmedUseCompilerModuleSwitch": false,"userConfirmedBundleSwitch": false,"packNpmManually": false,"packNpmRelationList": [],"minifyWXSS": true},"compileType": "miniprogram","libVersion": "2.14.1","appid": "wx0298165ccea56bb4","projectname": "invitation","condition": {},"editorSetting": {"tabIndent": "insertSpaces","tabSize": 2}
}
效果截图
相关文章:

微信小程序——婚礼邀请函
一、界面设计 首页: 精美的婚礼主题背景图,可能是新人的婚纱照或浪漫的插画。温馨的欢迎语,如 “欢迎参加我们的婚礼”。一个 “打开邀请函” 的按钮,引导用户进入邀请函详情页面。 邀请函详情页面: 顶部展示新人的照片…...

WebRTC Connection Negotiate解决
最近有个项目 ,部署之后一直显示,查了一些资料还是没有解决,无奈只有自己研究解决?经过排查,应该是内网穿透的问题 什么是内网穿透? 我们访问我们自己的官网产品页面,我们的服务器是一个单独…...

Redis面试篇1
1、为什么要用缓存? 使用缓存的目的就是提升读写性能。在实际的业务场景下,更多的是为了提升读性能,带来更好的性能和并发量。Redis的读写性能比MySQL好的多,我们就可以把MySQL中的热点数据缓存到Redis,提升读取性能&…...

Debezium系列之:Debezium 3.0.0.Final发布
Debezium系列之:Debezium 3.0.0.Final发布 Debezium 核心的变化需要 Java 17基于Kafka 3.8 构建废弃的增量信号字段的删除每个表的详细指标MariaDB连接器的更改版本 11.4.3 支持MongoDB连接器的更改MongoDB sink connectorMySQL连接器的改变MySQL 9MySQL向量数据类型Oracle连接…...

一文解决jQuery表格插件DataTable导出PDF中文乱码问题
原因是默认字体不支持中文,需要更换字体。 详情官网:pdfmake 官网的大致意思是,下载pdfmake后,自行生成可用的字体js文件 以下是详细操作: 重要前提:电脑上需要已安装nodejs 点击进入官网下载安装即可&a…...

使用pytorch进行迁移学习的两个步骤
1. 步骤及代码 迁移学习一般都会使用两个步骤进行训练: 固定预训练模型的特征提取部分,只对最后一层进行训练,使其快速收敛;使用较小的学习率,对全部模型进行训练,并对每层的权重进行细微的调节。 impor…...

ChatGPT相关参数示例
max_token 用于控制最大输出长度,若ChatGPT的回复大于max_tokens,则对输出结果进行截断。 from openai import OpenAI client OpenAI(base_url"https://api.chatanywhere.tech/v1" ) response client.chat.completions.create(model"…...

OWASP发布大模型安全风险与应对策略(QA测试重点关注)
开放式 Web 应用程序安全项目(OWASP)发布了关于大模型应用的安全风险,这些风险不仅包括传统的沙盒逃逸、代码执行和鉴权不当等安全风险,还涉及提示注入、对话数据泄露和数据投毒等人工智能特有的安全风险。 帮助开发者和测试同学更…...

【HarmonyOS开发笔记 2 】 -- ArkTS语法中的变量与常量
ArkTS是HarmonyOS开发的编程语言 ArkTS语法中的变量 【语法格式】: let 变量名: 类型 值 let:是定义变量的关键字类型: 值数据类型, 常用的数据类型 字符型(string)、数字型(number…...

UI自动化测试示例:python+pytest+selenium+allure
重点应用是封装、参数化: 比如在lib文件夹下,要存储封装好的方法和必要的环境变量(指网址等) 1.cfg.py:封装网址和对应的页面 SMP_ADDRESS http://127.0.0.1:8234SMP_URL_LOGIN f{SMP_ADDRESS}/login.html SMP_URL_DE…...

C/C++ 编程小工具
编写了 tools.h 和 tools.cpp,用于 Debug、性能测试、打印日志。 tools.h #ifndef TOOLS_H #define TOOLS_H#include <time.h> #include <fstream> #include <iostream> #include <random> #include <chrono> #include <vector&…...

第四十二章 使用 WS-ReliableMessaging
文章目录 第四十二章 使用 WS-ReliableMessaging从 Web 客户端发送一系列消息 第四十二章 使用 WS-ReliableMessaging IRIS 支持 WS-ReliableMessaging 规范的部分内容,如简介中所述。此规范提供了一种按顺序可靠地传递一系列消息的机制。本页介绍如何手动使用可靠…...

利士策分享,婚姻为何被称为大事?
利士策分享,婚姻为何被称为大事? 在历史的长河中,婚姻一直被视为人生中的头等大事,这一观念跨越时空,深深植根于各种文化和社会结构中。 古人为何将婚姻称为“大事”,这背后蕴含着丰富的社会、文化和心理寓…...

malloc源码分析之 ----- 你想要啥chunk
文章目录 malloc源码分析之 ----- 你想要啥chunktcachefastbinsmall binunsorted binbin处理top malloc源码分析之 ----- 你想要啥chunk tcache malloc源码,这里以glibc-2.29为例: void * __libc_malloc (size_t bytes) {mstate ar_ptr;void *victim;vo…...

软考系统分析师知识点五:数据通信与计算机网络
前言 今年报考了11月份的软考高级:系统分析师。 考试时间为:11月9日。 倒计时:32天。 目标:优先应试,其次学习,再次实践。 复习计划第一阶段:扫平基础知识点,仅抽取有用信息&am…...

windows客户端SSH连接ubuntu/linux服务器,三种网络连接:局域网,内网穿透(sakuraftp),虚拟局域网(zerotier)
windows客户端SSH连接ubuntu/linux服务器,三种网络连接:局域网,内网穿透(sakuraftp),虚拟局域网(zerotier) 目录 SSH简述、三种网络连接特点SSH简述局域网内连接内网穿透(…...

Python 工具库每日推荐【openpyxl 】
文章目录 引言Python Excel 处理库的重要性今日推荐:openpyxl 工具库主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例案例:自动生成月度销售报告案例分析高级特性条件格式数据验证扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 TypeScript 设计…...

本地生活服务项目入局方案解析!本地生活服务商系统能实现怎样的作业效果?
当前,各大平台的本地生活服务业务日渐兴盛,提高创业者入局意向的同时,也让本地生活服务项目有哪些等问题也成为了多个创业者社群中的热议对象。而从目前的讨论情况来看,在创业者们所询问的众多本地生活服务项目中,通过…...

ML 系列:【13 】— Logistic 回归(第 2 部分)
文章目录 一、说明二、挤压方法三、Logistic 回归中的损失函数四、后记 一、说明 在这篇文章中,我们将深入研究 squashing 方法,这是有符号距离方法(第 12节)的一种很有前途的替代方案。squashing 方法通过提供增强的对异常值…...

45岁被裁员的程序员,何去何从?
在当今快速变化的技术行业,职业生涯的稳定性受到挑战。在45岁被裁员,对很多程序员来说,可能是一种惊慌失措的体验。然而,这个阶段也可以被视为一个重新审视和调整方向的机会。本文将对可能的出路进行全方位的分析,并提…...

云计算Openstack Neutron
OpenStack Neutron是OpenStack云计算平台中的网络服务组件,它为OpenStack提供了强大的网络连接功能。 一、基本概念 Neutron是一个网络服务项目,旨在为OpenStack提供网络连接。它允许用户创建和管理虚拟网络,包括子网、路由、安全组等&…...

PointNet++网络详解
数据集转换 数据集转换的意义在于将原本的 txt 点云文件转换为更方便运算的npy点云文件,同时,将原本的xyzrgb这 6 个维度转换为xyzrgbc,最后一个c维度代表该点云所属的类别。 for anno_path in anno_paths:print(anno_path)try:elements a…...

Java | Leetcode Java题解之第459题重复的子字符串
题目: 题解: class Solution {public boolean repeatedSubstringPattern(String s) {return kmp(s s, s);}public boolean kmp(String query, String pattern) {int n query.length();int m pattern.length();int[] fail new int[m];Arrays.fill(fa…...

【动态规划-最长公共子序列(LCS)】【hard】力扣1092. 最短公共超序列
给你两个字符串 str1 和 str2,返回同时以 str1 和 str2 作为 子序列 的最短字符串。如果答案不止一个,则可以返回满足条件的 任意一个 答案。 如果从字符串 t 中删除一些字符(也可能不删除),可以得到字符串 s &#x…...

图片编辑为底片,智能工具助力,创作精彩视觉作品
在当今数字化时代,图像编辑已成为表达创意和美化视觉作品的重要手段。借助智能工具,即使是初学者也能轻松驾驭图片编辑。接下为大家展示图片编辑为底片图片的效果。 1.打开“首助编辑高手”,选择这里“图片批量处理”版块页面上 2.导入保存有…...

机器学习/数据分析--用通俗语言讲解时间序列自回归(AR)模型,并用其预测天气,拟合度98%+
时间序列在回归预测的领域的重要性,不言而喻,在数学建模中使用及其频繁,但是你真的了解ARIMA、AR、MA么?ACF图你会看么?? 时间序列数据如何构造???,我打过不少…...

回溯算法之值子集和问题详细解读(附带Java代码解读)
子集和问题(Subset Sum Problem) 是一个经典的组合优化问题。问题可以这样描述: 给定一个整数集合和一个目标整数 target,我们需要从集合中选出若干个整数,使它们的和等于 target。如果这样的子集存在,返回…...

mysql游标的使用
说明: 虽然我们也可以通过筛选条件 WHERE 和 HAVING,或者是限定返回记录的关键字 LIMIT 返回一条记录,但是,却无法在结果集中像指针一样,向前定位一条记录、向后定位一条记录,或者是 随意定位到某一条记录 …...

linux udev详解
1.概念介绍 1.1sysfs文件系统 Linux 2.6以后的内核引入了sysfs文件系统,sysfs被看成是与proc、devfs和devpty同类别的文件系统,该文件系统是一个虚拟的文件系统,它可以产生一个包括所有系统硬件的层级视图,与提供进程和状态信息…...

EventSource和websocket该用哪种技术
EventSource(也称为Server-Sent Events, SSE)和WebSocket都是实现实时通信的技术,但是它们的设计目的和使用场景有所不同。在选择使用哪种技术时,需要根据具体的应用需求来决定。下面是一些关键点,可以帮助你做出选择&…...