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

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章阶段案例最终效果图

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

相关推荐
java1234_小锋10 小时前
【免费】基于Python的微信小程序网约车(打车,在线叫车,移动出行)系统(FastAPI+Vue3) 锋哥原创出品,必属精品
微信小程序·小程序·fastapi·网约车系统·在线叫车系统
2501_9160074715 小时前
Bundle ID 注册与管理 App ID 创建指南 命名规则 权限开关与删除注意事项
android·ios·小程序·https·uni-app·iphone·webview
凡科网小帆21 小时前
2026小程序商城做的比较好的品牌,怎么选小程序商城品牌
小程序·小程序商城
2501_915909061 天前
iOS 证书创建与管理 类型限制 p12 密码与云备份实操
android·ios·小程序·https·uni-app·iphone·webview
拖孩2 天前
用 AI 重解千年观音灵签,做了一个微信小程序,每天摇一摇,命运给你回应
前端·后端·微信小程序
黄华SJ520it2 天前
顶俏洗衣液模式制度开发介绍:S2B2C社交分销+多门店核销系统全解析
前端·数据库·小程序·零售·系统开发
北极糊的狐2 天前
钉钉小程序报错data.formatTime is not a function是因为 axml 模板中不能直接调用 Page 内自定义方法!
java·小程序·钉钉
java1234_小锋2 天前
【免费】微信小程序网约车(打车,在线叫车,移动出行)系统(SpringBoot4+Vue3) 锋哥原创出品,必属精品
微信小程序·网约车·在线叫车·移动出行
show4333 天前
多格式导出怎么做?2026免费小程序TXT/SRT实践
开发语言·小程序·c#
AI砖家3 天前
AI编程—微信小程序开发规范
微信小程序·小程序·notepad++·ai编程