微信小程序开发案例 | 幸运抽签小程序(下)

01、逻辑实现

1 首页逻辑

首页主要功能就是监听用户的摇一摇动作,然后随机抽签后传递给结果页去显示。

1)监听摇一摇动作

在index.js中自带的生命周期函数onLoad(options)中追加对摇一摇动作的监听,一旦监听到用户的相关动作就让手机较长时间振动。

index.js相关代码如下:

复制代码
1. // index.js
2. Page({
3. ...,
4. /**
5. * 生命周期函数--监听页面加载
6. */
7. onLoad: function (options) {
8. // 监听传感器变化
9. wx.onAccelerometerChange(res => {
10. // 任意一个方向超过指定值(数字越大需要摇的力度越大些)
11. if (res.x > 1 || res.y > 1 || res.z > 1) {
12. // 让手机振动
13. wx.vibrateLong()
14. }
15. })
16. },
17. ...18. }

第9行使用了wx.onAccelerometerChange()来监听加速度传感器的变化,根据变化幅度来判断是否发生了"摇一摇"动作;第13行使用了wx.vibrateLong()来让手机较长时间的振动。

注:微信开发工具暂时不支持监听振动幅度超过1的摇一摇,请开发者用真机预览或调试来实现,或临时把数值调低例如0.1进行电脑端测试。

2)抽签并跳转结果页

因为一共6张幸运签,因此可以在抽签时利用Math.random()生成随机数0-5之间任意一个数字,并将此数字传递给结果页。

index.js相关代码修改如下:

复制代码
1. // index.js
2. Page({
3. ...,
4. /**
5. * 生命周期函数--监听页面加载
6. */
7. onLoad: function (options) {
8. // 监听传感器变化
9. wx.onAccelerometerChange(res => {
10. // 任意一个方向超过指定值(数字越大需要摇的力度越大些)
11. if (res.x > 1 || res.y > 1 || res.z > 1) {
12. // 让手机振动
13. wx.vibrateLong()
14. 
15. // 随机产生一个数字
16. let x = Math.floor(Math.random() * 6)
17. // 打开新页面
18. wx.reLaunch({
19. url: '../result/result?x=' + x,
20. })
21. }
22. 
23. })
24. },
25. ...26. }

上述代码中第16行Math.random()*6可以生成一个[0.0,6.0)之间的小数,因此还需要用Math.floor()去尾法来保留整数部分,这样就可以得到一个[0,5]之间的整数了。

这里第19行用了wx.reLaunch()打开新页面,这表示关闭其它所有页面只打开结果页,以免首页还在进行摇一摇监听。(注:由于只有两页,用wx.redirectTo()也是可以的,这表示直接在当前页面重定向到结果页,此时首页也一样关掉了。)

最后记得在result.js自带的生命周期函数onUnload()里面停止对摇一摇动作的监听。

index.js相关代码修改如下:

复制代码
1. // index.js
2. Page({
3. ...,
4. /**
5. * 生命周期函数--监听页面卸载
6. */
7. onUnload: function () {
8. // 停止监听加速传感器
9. wx.offAccelerometerChange()
10. }11. }

当已经抽完签准备打开结果页时就可以停止监听传感器了。

此时首页逻辑就已全部完成。

2 结果页逻辑

1)显示指定的幸运签

修改result.wxml代码,将需要显示的幸运签图片名称改为变量方便更新。

result.wxml相关代码修改如下:

复制代码
1. <!-- 1 整体容器 -->
2. <view class="container">
3. <!-- 2 抽签结果卡片 -->
4. <image src="/images/cards/{{cardName}}.jpg" mode="widthFix"></image>
5. <!-- 3 按钮 -->
6. <button bindtap="backToHome">再来一次</button>
7. </view>

这样就和之前设计完成的效果保持一致了。

在result.js顶部记录所有抽签卡片名称,并在生命周期函数onLoad(options)中接收首页传递过来的参数x。

result.js相关代码更新如下:

复制代码
1. // result.js
2. Page({
3. /**
4. * 页面的初始数据
5. */
6. data: {
7. cardName: 'xingfu'
8. },
9. ...10. }

此时已经可以和首页连贯起来测试抽签功能了。

由于摇一摇功能需要用真机预览或调试,开发者如果不方便来回切换可以顶部"普通编译"处新增结果页的编译模式。参数配置可参考图10-21。

■ 图10-21 结果页编译模式配置参数示例

注:这里的x取值可以是[0,5]之间任意整数。

最终效果如图10-22所示。

■ 图10-22 结果页显示指定幸运签

2)返回首页

修改result.wxml代码,为按键追加自定义点击事件backToHome。

result.wxml相关代码修改如下:

复制代码
1. <!-- 1 整体容器 -->
2. <view class="container">
3. <!-- 2 抽签结果卡片 -->
4. <image src="/images/cards/{{cardName}}.jpg" mode="widthFix"></image>
5. <!-- 3 按钮 -->
6. <button bindtap="backToHome">再来一次</button>
7. </view>

在result.js中追加自定义函数backToHome,相关代码如下:

复制代码
1. // result.js
2. Page({
3. ...,
4. /**
5. * 自定义函数--回到首页
6. */
7. backToHome: function () {
8. // 关闭所有页面,只打开首页
9. wx.reLaunch({
10. url: '../index/index',
11. })
12. },
13. ...14. }

至此整个阶段案例就完成了,完整运行效果如图10-23所示。

■图10-23 第10章阶段案例最终效果图

本案例主要为了演示通过对加速度传感器监听确认用户进行了摇一摇功能,顺便复习了如何触发手机振动的功能。该案例全部都是上上签,表达了对各位读者朋友们的祝愿。开发者如有兴趣还可继续添加更多类型的签进去。

相关推荐
我叫逢2 小时前
一键去水印实战已上线!心得~
微信小程序·php·去水印
qq_12498707535 小时前
基于微信小程序的电子元器件商城(源码+论文+部署+安装)
java·spring boot·spring·微信小程序·小程序·毕业设计
weixin_lynhgworld9 小时前
科技赋能医疗,陪诊小程序开启就医新体验
科技·小程序
2501_9160074710 小时前
iOS 证书如何创建,从能生成到能长期使用
android·macos·ios·小程序·uni-app·cocoa·iphone
壹立科技11 小时前
商超到家即时服务:软件基础功能打通“线上线下”关键链路
微信小程序·软件需求·外卖跑腿平台·外卖跑腿系统·商超配送
jqpwxt12 小时前
启点创新游乐场多商户分账管理系统:驱动文旅商业生态革新的数字化引擎
大数据·人工智能·小程序
00后程序员张13 小时前
AppStoreInfo.plist 在苹果上架流程中的生成方式和作用
android·小程序·https·uni-app·iphone·webview
计算机毕设指导613 小时前
基于微信小程序+django连锁火锅智慧餐饮管理系统【源码文末联系】
java·后端·python·mysql·微信小程序·小程序·django
风月歌13 小时前
php医院预约挂号系统小程序源代码(源码+文档+数据库)
数据库·微信小程序·小程序·毕业设计·php·源码
qq_124987075314 小时前
基于微信小程序的校园资讯共享平台的设计与实现(源码+论文+部署+安装)
spring boot·后端·微信小程序·小程序·毕业设计