婚礼邀请函小程序项目
短信预约 -IT技能 免费直播动态提醒
文章目录
一、学习目标
1.掌握小程序常用组件的使用
2.掌握腾讯视频插件的使用
3.掌握背景音乐API、地图API的使用
4.掌握订阅消息的发送
二、开发前准备
- 项目展示、项目分析、项目初始化
1.项目展示
- 照片页面
- 美好时光页面
- 宾客信息页面
三、代码实现
1 项目搭建
- 在微信开发者工具中创建一个空白项目。创建成功后,新建app.json文件,在该文件中定义本项目中的页面路径、定义项目导航栏样式、定义项目底部标签栏
{ "pages":[ "pages/index/index", "pages/picture/picture", "pages/video/video", "pages/map/map", "pages/guest/guest", "pages/logs/logs" ], "window":{ "backgroundTextStyle":"light", "navigationBarBackgroundColor": "#fff", "navigationBarTitleText": "婚礼邀请函", "navigationBarTextStyle":"black" }, "tabBar": { "color": "#ccc", "selectedColor": "#ff4ccc", "borderStyle": "black", "backgroundColor": "#ffffff", "position": "bottom", "list": [ { "pagePath": "pages/index/index", "iconPath": "/images/invite.png", "selectedIconPath": "/images/invite.png", "text": "邀请函" }, { "pagePath":"pages/picture/picture", "iconPath": "/images/marry.png", "selectedIconPath": "/images/marry.png", "text": "照片"}, { "pagePath":"pages/video/video", "iconPath": "/images/video.png", "selectedIconPath": "/images/video.png", "text": "美好时光"}, { "pagePath":"pages/map/map", "iconPath": "/images/map.png", "selectedIconPath": "/images/map.png", "text": "婚礼地点"}, { "pagePath":"pages/guest/guest", "iconPath": "/images/guest.png", "selectedIconPath": "/images/guest.png", "text": "宾客信息"} ]}, "style": "v2", "sitemapLocation": "sitemap.json"}
2 功能实现
2.1 背景音乐功能
- 在index.wxml设置页面和展示图片,代码如下:
- 在index.wxss中编写播放器的样式
.content{ width: 100vw; height: 100vh;}.bg{ width: 100%; height: 100%;}.play{ position: fixed; top: 20rpx; right: 20rpx; z-index: 1;}.play>image:first-child{ width: 80rpx; height: 80rpx;}.play>image:last-child{ width: 20rpx; height: 80rpx; margin-left: -5px;}.cont{ width: 100%; height: 100%; position: fixed; top: 0rpx; z-index: 2; display: flex; flex-direction: column; align-items: center;}.cont-info-weding{ flex: 1; display: flex; flex-direction: column; align-items: center;}.cont-gif{ width: 19vh; height: 18.6vh;}.cont-title{ font-size: 5vh; color:#ff4c91; font-weight: bold; margin-top: 1.5vh;}.cont-avatar{ width: 24vh; height: 24vh; border-radius: 50%; border: 3px solid #ff4c91; margin-top: 2.5vh;}.cont-info{ display: flex; flex-direction: row; align-items: center; width: 50vw;}.cont-info-wedding{ width: 60rpx; height: 60rpx; }.content-name{ position: relative; color: #ff4c91; font-weight: bold; font-size: 2.7vh; }.content-name>image{ height: 30rpx; width: 30rpx; border-radius: 50%; border: 1px solid #ff4c91; position: absolute; top: -25rpx; right: -35rpx;}.cont-address{ color:#ff4c91; font-weight: bold; margin-top: 10rpx; font-size: 2.9vh; align-items: center; text-align: center; line-height: 4.5vh;}.cont-address>view:first-child{ font-size:3.2vh; margin-bottom: 2vh;}
- 在index.js中实现音乐播放、暂停功能,并选择音乐源,代码如下:
onReady: function () { this.bgm = wx.getBackgroundAudioManager() this.bgm.onCanplay(()=> { this.bgm.pause() }) this.bgm.class="lazy" data-src = this.music_url},
- 在index.js中实现正在播放功能,代码如下:
play: function (e) { if (this.data.isPlayingMusic) { this.bgm.pause() } else { this.bgm.play() } this.setData({isPlayingMusic:!this.data.isPlayingMusic })},
- 在index.wxml中编写页面结构的样式,实现一键拨打电话功能
邀请函 小张 新郎 小李 新娘 我们邀请您来参加我们的婚礼 时间:2022年12月24日 地点: /
2.2 照片页面功能
- 实现纵向轮播图:在picture.js中准备图片路径
Page({ data: { pictures:[ { id:0, class="lazy" data-src:"/images/timg1.jpg" }, { id:1, class="lazy" data-src:"/images/timg2.jpg" }, { id:2, class="lazy" data-src:"/images/timg3.jpg" }, { id:3, class="lazy" data-src:"/images/timg4.jpg" } ] },
- 在picture.wxml中设置swiper组件的属性
- 在picture.wxss中编写样式
swiper{ height: 100vh;}image{ height: 100%;}
2.3 美好时光页面
- 在video.wxml中使用video组件播放视频,并提供获取视频和发送弹幕的的按钮
{{item.title}} {{item.time}}
- 在video.js中定义弹幕数据和视频资源地址
Page({ data: { danmuList: [{ text: '第 1s 出现的弹幕', color: '#ff0000', time: 1 }, { text: '第 2s 出现的弹幕', color: '#ff00ff', time: 2 }, { text: '第 3s 出现的弹幕', color: '#ff00ff', time: 3}, { text: '第 4s 出现的弹幕', color: '#ff00ff', time: 3} ] , vedioList:[ {title:"海边旅游", time:'2022年1月1日', class="lazy" data-src:'http://www.lzy.edu.cn/vedio/lzy2022.mp4'}, {title:"川西旅游", time:'2022年10月1日', class="lazy" data-src:'http://www.lzy.edu.cn/vedio/lzy2022.mp4'}, {title:"北京旅游", time:'2022年5月1日', class="lazy" data-src:'http://www.lzy.edu.cn/vedio/lzy2022.mp4'}, ] }, play:function(e){ console.log("播放了") }, pause:function(e){ console.log("视频暂停") }, onLoad(options) { },
- 在video.wxss中编写样式
.video-list{ margin:10rpx 25rpx; padding:20rpx; border-radius: 10rpx; background: #ffffff; box-shadow:0 8rpx 17rpx 0 rgba(7,17,27,0.1);}.video-list-title{ font-size:35rpx; color:#333333; } .video-list-time{ font-size:30rpx; color:#979797; }.video-list>video{ width:100%; margin-top: 20rpx;}
- 在app.json中配置本项目使用的插件
"plugins":{"tencentvideo":{"version":"1.2.2","provider":"wxa75efa648b60994b"}}
- 在video.json中将腾讯视频插件添加到自定义组件,将组件名称命名为txv_video
{ "usingComponents": { "txv-video":"plugin://tencentvideo/video" }}
2.4 婚礼地点页面
- 在map.wxml中编写页面结构
- 在map.wxss中编写页面样式
.pg{ width: 100vh; height: 100vh;}
- 在map.js中编写data数据和markertap()函数
// pages/map/map.jsPage({ data: { markers: [ { id: 0, longitude: 105.410766, latitude: 28.915616, title: "婚礼地点", iconPath: "/images/navi.png", width: 30, height: 30 }, { id: 1, longitude: 105.410766, latitude: 28.916616, title: "停车场", iconPath: "/images/navi.png", width: 30, height: 30 }, { id: 2, longitude: 105.413886, latitude: 28.917616, title: "停车场", iconPath: "/images/navi.png", width: 30, height: 30 } ], polyLine:[{ points:[ {latitude: 28.917616, longitude: 105.413886}, {latitude:28.916616,longitude:105.410766}, {latitude:28.915616,longitude:105.410766}], color:"#ffffffAA", width:3, dottedLine:true }, //{ // points:[ // {latitude: 28.917616, longitude: 105.413586}, // {latitude:28.916616,longitude:105.415766}, // {latitude:28.915616,longitude:105.415766}], // color:"#ffffffAA", // width:3, // dottedLine:true // } ], circles:[{ latitude:28.915616, longitude:105.410566, radius:200, color:"#ff4c91AA", strokeWidth:3, fillColor:"#ff4c910A" }, { latitude:28.915616, longitude:105.410566, radius:300, color:"#000000AA", strokeWidth:3, fillColor:"#ff4c910A", } ] }, markertap:function(e){ //点击标记处位触发,后面给地图导航的逻辑 console.log(e) var onemarker=this.data.markers[e.markerId] wx.openLocation({ latitude: onemarker.latitude, longitude: onemarker.longitude, name:onemarker.title, address:"" }) }, regionchange:function(e){ console.log(e); }, tap:function(e){ console.log(e); }, updated:function(e){ console.log(e); },
2.5 宾客信息页面
- 在index.wxml中实现邀请函首页展现新人信息、婚礼信息功能,代码如下:
- 在guest.wxml中实现邀请函首页展现新人信息、婚礼信息功能
- 在guest.js中编写data数据和pickerChange()函数、事件处理函数、实现表单验证,在page()函数的后面编写server对象,用于模拟服务器,与微信接口进行交互。
// pages/guest/guest.jsPage({ data: { picker:{ array:['1','2','3','4','5'], index:0 } }, pickerchange:function(e){ console.log(e); this.setData({ 'picker.index':e.detail.value }) }, formsubmit:function(e){ console.log(e); var name = e.detail.value.name; var phone=e.detail.value.phone; var num = e.detail.value.num; var wish =e.detail.value.wish; //1'判断姓名是否由中英文组成 this.checkName(name) //2.判断电话号码是否符合规范 this.checkPhone(phone) }, checkPhone:function(data){ var reg = /^1[3456789][0-9]{9}$/ if(!reg.test(data)){ wx.showToast({ title: '号码格式错误', icon:"none", duration:1500 }) } }, checkName:function(data){ //正则表达式 中英文 var reg = /^[a-zA-Z\u4e00-\u9fa5]+$/ if(!reg.test(data)){ wx.showToast({ title: '姓名输入错误', icon:"none", duration:1500 }) } },
来源地址:https://blog.csdn.net/qq_55679598/article/details/128426719
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341