当前位置: 首页 > news >正文

微信小程序实现运动能耗计算

微信小程序实现运动能耗计算

近我做了一个挺有意思的微信小程序,能够实现运动能耗的计算。只需要输入性别、年龄、体重、运动时长和运动类型这些信息,就能算出对应的消耗热量。

具体来说,在小程序里,性别不同,身体基础代谢和运动时的能耗模式会有差异;年龄影响着身体机能和基础代谢率;体重是计算能耗的关键参数,体重越大,运动时消耗的能量通常越多;运动时长直接关联能耗总量,时长越长,消耗热量自然越多;而不同的运动类型,比如跑步、游泳、跳绳等,它们的运动强度和能耗效率各有不同,所以在计算时需要区分开来。通过综合这些因素,运用特定的算法,就能较为准确地得出运动所消耗的热量。

这个界面示例已经同步到微信小程序啦,大家在微信里搜索「蒜鸟编程」就能看到运行示例,直观感受一下这个计算功能是怎么运作的。如果有对编程、小程序开发感兴趣的小伙伴,还可以在小红书、抖音搜索用户「蒜鸟编程」,上面有更多相关内容分享哦。希望这个小程序和相关分享能给正在学习编程、对运动健康数据计算感兴趣的朋友提供一些参考。当然,要是大家在使用过程中发现有不足的地方,或者觉得哪里有问题,真心希望大家能不吝指正,咱们一起交流探讨,让这个小程序能变得更完善。具体图片如下:
运动能耗计算示例图片

1、js代码:

Page({/*** 页面的初始数据*/data: {current: 'f',metValue: 0,runList: [{id: 1,name: '静坐/办公',met: 1.5},{id: 2,name: '慢走(4km/h)',met: 3.5},{id: 3,name: '快走(6km/h)',met: 5.5},{id: 4,name: '慢跑(8km/h)',met: 8.0},{id: 5,name: '跑步(10km/h)',met: 10.0},{id: 6,name: '游泳(自由泳)',met: 8.0},{id: 7,name: '骑自行车(中速)',met: 6.0},{id: 8,name: '篮球(比赛)',met: 8.0},{id: 9,name: '足球',met: 9.0},{id: 10,name: '跳绳(中等强度)',met: 10.0},{id: 11,name: '跳健身操',met: 7.0},{id: 12,name: '登山',met: 7.0},{id: 13,name: '瑜伽',met: 3.0},{id: 14,name: '力量训练',met: 6.0}],isVisible: false,sexValue: '',ageValue: '',weight: '',runInfo: '',duration: '',blinkTimer: null},onSelectClick(e) {let self = this;let attr = ['男性', '女性', '未知'];wx.showActionSheet({itemList: attr,success(res) {self.setData({sexValue: attr[res.tapIndex]})},fail(res) {console.log(res.errMsg)}})},//选择监听selectClick(e) {let old = this.data.current;let info = e.currentTarget.dataset;let tag = info.index;this.setData({current: old == tag ? 'f' : tag,runInfo: old == tag ? 'f' : info.item})},// 输入绑定onInputClick: function (e) {let keys = e.currentTarget.dataset.key;this.setData({[keys]: e.detail.value});},// 计算能耗calculateClick() {let self = this;const {sexValue,ageValue,weight,runInfo,duration} = this.data;const age = parseInt(ageValue);const wgt = parseFloat(weight);const tim = parseFloat(duration);// 获取选中的MET值if (sexValue == '') {wx.showToast({title: '请选择性别',icon: 'none'});return;}if (isNaN(Number(age)) || isNaN(Number(wgt)) || isNaN(Number(tim))) {wx.showToast({title: '输入的年龄、体重、时长格式存在异常!',icon: 'none'});return;}// 获取选中的MET值if (!runInfo.met) {wx.showToast({title: '请选择运动类型',icon: 'none'});return;}let energy = 0;if (sexValue === '男性') {energy = ((0.2 * (runInfo.met) * wgt) + 7) * (tim / 60);} else if (sexValue === '女性') {energy = ((0.15 * (runInfo.met) * wgt) + 7) * (tim / 60);} else {energy = (runInfo.met) * wgt * (tim / 60);}// 更新结果this.setData({metValue: energy,isVisible: true}, () => {wx.pageScrollTo({scrollTop: 0,duration: 300 // 滚动时间,单位为毫秒,可以根据需要调整});setTimeout(() => {self.setData({isVisible: false,blinkTimer: null});}, 2000);});},onUnload() {let timer = this.data.blinkTimer;if (timer) {clearTimeout(timer);}},
})

2、wxml代码:

<view class="level top-box"><view class="top-dot"><text class="top-num {{isVisible?'blink-text':''}}">{{metValue}} 卡路里</text><text class="top-text">消耗热量</text></view><view class="top-tip"><text class="top-tip-text">注:平台仅提供参考示例,不作为其他依据</text></view>
</view>
<view class="input-section"><view class="input-group"><text class="label">性别 (♀)</text><input class="input" disabled bind:tap="onSelectClick" value="{{sexValue}}" placeholder="点击选择性别" /></view><view class="input-group"><text class="label">年龄 (岁)</text><input class="input" type="number" bindinput="onInputClick" maxlength="3" data-key="ageValue" value="{{ageValue}}" placeholder="请输入年龄" /></view><view class="input-group"><text class="label">体重 (kg)</text><input class="input" type="number" bindinput="onInputClick" maxlength="5" data-key="weight" value="{{weight}}" placeholder="请输入体重" /></view><view class="input-group"><text class="label">运动时长</text><input class="input" type="number" bindinput="onInputClick" maxlength="5" data-key="duration" value="{{duration}}" placeholder="请输入运动时长 (分钟)" /></view><view class="input-group"><text class="label">运动类型</text><input class="input" disabled value="{{runInfo.name}}" placeholder="点击下方选择运动类型" /></view>
</view>
<view class="run-box"><view class="run-title">选择运动类型</view><view class="label-box"><block wx:for="{{runList}}" wx:key="item"><text bindtap="selectClick" data-item="{{item}}" data-index="{{index}}"class="label-run {{current==index?'select':''}}">{{item.name}}</text></block></view>
</view><button class="calculate-btn" bindtap="calculateClick">开始计算
</button>

3、wxss代码:

page {font-size: 32rpx;padding-bottom: 20rpx;background-color: #f1f1f1;
}.level {display: flex;flex-direction: row;align-items: center;
}.top-box {position: relative;padding: 40rpx 20rpx 60rpx 20rpx;background-color: #3CB371;justify-content: center;
}.top-text {margin: 0 20rpx;font-size: 28rpx;color: #696969;
}.top-num {padding-bottom: 10rpx;font-weight: bold;color: #3CB371;
}.top-dot {display: flex;flex-direction: column;background-color: white;color: #000000;border-radius: 200rpx;width: 60%;height: 150rpx;align-items: center;justify-content: center;box-shadow: 0 0 10rpx 10rpx #61a07d;
}.top-tip {position: absolute;left: 0;right: 0;bottom: -20rpx;text-align: center;
}.top-tip-text {background-color: #ffffff;padding: 15rpx 10%;font-size: 24rpx;border-radius: 50rpx;color: #909399;
}.input-section {background-color: #fff;padding: 30rpx;margin-bottom: 25rpx;margin-top: 50rpx;
}.input-group {display: flex;align-items: center;margin-bottom: 30rpx;
}.label {width: 25%;font-size: 28rpx;color: #666;
}.input {flex: 1;height: 80rpx;font-size: 32rpx;padding: 0 10rpx;border-bottom: 1rpx solid #eee;
}.run-box {margin-top: 20rpx;padding: 30rpx;background-color: white;
}.run-title {font-size: 30rpx;margin-bottom: 10rpx;color: #666666;
}.label-box {margin-top: 10rpx;flex-wrap: wrap;display: inline-flex;flex-direction: row;
}.label-run {background-color: white;color: #3CB371;margin: 10rpx 25rpx 15rpx 0;font-size: 28rpx;padding: 8rpx 20rpx;border-radius: 50rpx;text-align: center;border: 1rpx solid #3CB371;
}.select {background-color: #3CB371;color: white;
}.calculate-btn {background-color: #4CAF50;color: white;font-size: 32rpx;margin-top: 20rpx;border-radius: 40rpx;height: 88rpx;line-height: 88rpx;padding: 0;box-shadow: 0 4rpx 12rpx rgba(76, 175, 80, 0.3);
}.calculate-btn[disabled] {background-color: #ccc;box-shadow: none;
}.calculate-btn::after {box-shadow: none;border: none;
}/* 定义闪烁动画 */
.blink-text {color: #da7828;animation: blink 1s infinite;
}@keyframes blink {0%,100% {opacity: 1;}50% {opacity: 0;}
}

4、json代码:

{"usingComponents": {},"navigationBarBackgroundColor": "#3CB371","navigationBarTitleText": "运动能耗计算"
}

如需查看运动能耗计算的完整源码及运行示例,可在微信小程序、小红书、抖音等平台搜索「蒜鸟编程」获取相关技术内容。平台内提供的示例界面支持直观了解算法实现逻辑,适合学习小程序开发、能耗计算模型的朋友作为参考案例。后续将围绕编程技术持续更新更多实践示例,欢迎开发者针对技术细节进行交流探讨。

相关文章:

  • 12306高并发计算架构揭秘:Apache Geode 客户端接入与实践
  • webPack基本使用步骤
  • Neo4j 监控全解析:原理、技术、技巧与最佳实践
  • 【Linux系列】rsync命令详解与实践
  • 深入理解C#中的Web API:构建现代化HTTP服务的完整指南
  • BERT:让AI真正“读懂”语言的革命
  • Vue指令修饰符、v-bind对样式控制的增强、computed计算属性、watch监视器
  • 什么是预构建,Vite中如何使用预构建
  • Openlayers从入门到入坟
  • 【conda配置深度学习环境】
  • [Java 基础]抽象类和接口
  • 【C/C++】析构函数好玩的用法:~Derived() override
  • MCP与检索增强生成(RAG):AI应用的强大组合
  • 卫星的“太空陀螺”:反作用轮如何精准控制姿态?
  • 十六、【前端强化篇】完善 TestCase 编辑器:支持 API 结构化定义与断言配置
  • leetcode 455. Assign Cookies和2410. Maximum Matching of Players With Trainers
  • Redis命令使用
  • 神经网络-Day44
  • LabVIEW的MathScript Node 绘图功能
  • 【开源工具】基于PyQt5工作时长计算器工具开发全解析
  • 菏泽疫情最新消息/重庆seo整站优化效果
  • wordpress 登录后可查看/杭州最好的seo公司
  • 如何在工商局网站做企业年报/seo关键字优化
  • 网页设计基础知识试题/优化大师官网入口
  • logo设计在线生成免费标智客/百度seo按天计费
  • 洪梅做网站/长尾关键词在线查询