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

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

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

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

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

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": "运动能耗计算"
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/390.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

点评中是如何实现短信登录的

点评中是如何实现短信登录的 首先在这个项目中 我们主要还是通过session来实现的验证码登录 根据这个图片我们很清楚的知道 首先要制造一个随机的验证码以确保并且保存到redis中&#xff08;等下我会说为什么不存在session中&#xff09;接下来前端传来验证码 后端校验后 判断…

Kafka入门-集群基础环境搭建(JDK/Hadoop 部署 + 虚拟机配置 + SSH 免密+Kafka安装启动)

Kafka 简介 传统定义&#xff1a;Kafka是一个分布式的基于发布/订阅模式的消息队列&#xff0c;应用于大数据实时处理领域。 Kafka最新定义&#xff1a;Apache Kafka是一个开源分布式事件流平台&#xff0c;被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用…

从OSI到TCP/IP:网络协议的演变与作用

个人主页&#xff1a;chian-ocean 文章专栏-NET 从OSI到TCP/IP&#xff1a;网络协议的演变与作用 个人主页&#xff1a;chian-ocean文章专栏-NET 前言网络发展LANWAN 协议举个例子&#xff1a; 协议的产生背景 协议的标准化OSI模型参考OSI各个分层的作用各层次的功能简介 TCP/…

Java观察者模式深度解析:构建松耦合事件驱动系统的艺术

目录 观察者模式基础解析核心结构与实现原理Java内置观察者实现Spring框架中的高级应用典型应用场景与实战案例观察者模式变体与优化常见问题与最佳实践总结与未来展望1. 观察者模式基础解析 1.1 模式定义与核心思想 观察者模式(Observer Pattern)是一种行为型设计模式,它…

前端(vue)学习笔记(CLASS 7):vuex

vuex概述 vuex是一个vue的状态管理工具&#xff0c;状态就是数据 大白话&#xff1a;vuex是一个插件&#xff0c;可以帮我们管理vue通用的数据&#xff08;多组件共享的数据&#xff09; 场景 1、某个状态在很多个组件来使用&#xff08;个人信息&#xff09; 2、多个组件…

论文中pdf图片文件太大怎么办

文章目录 1.使用pdf文件的打印功能将文件导出2.操作3.前后文件大小对比 1.使用pdf文件的打印功能将文件导出 该方法在保证清晰度的同时&#xff0c;内存空间也能实现减少&#xff08;如果使用线上的压缩pdf工具&#xff0c;清晰度会直线下降&#xff09; 2.操作 点击文件—&…

Java并发编程:读写锁与普通互斥锁的深度对比

在Java并发编程中&#xff0c;锁是实现线程安全的重要工具。其中&#xff0c;普通互斥锁&#xff08;如synchronized和ReentrantLock&#xff09;和读写锁&#xff08;ReentrantReadWriteLock&#xff09;是两种常用的同步机制。本文将从多个维度深入分析它们的区别、适用场景及…

C#面向对象实践项目--贪吃蛇

目录 一、项目整体架构与核心逻辑 二、关键类的功能与关系 1. 游戏核心管理类&#xff1a;Game 2. 场景接口与基类 3. 具体场景类 4. 游戏元素类 5. 基础结构体与接口 三.类图 四、核心流程解析 五、项目可优化部分 一、项目整体架构与核心逻辑 该项目运用场景管理模…

传输层协议:网络通信的关键纽带

在计算机网络的复杂体系中&#xff0c;传输层协议扮演着举足轻重的角色&#xff0c;它如同桥梁一般&#xff0c;连接着应用层与网络层&#xff0c;为不同主机上的应用进程提供端到端的通信服务&#xff0c;确保数据能够准确、高效地在网络中传输。深入理解传输层协议&#xff0…

高效易用的 MAC 版 SVN 客户端:macSvn 使用体验

高效易用的 MAC 版 SVN 客户端&#xff1a;macSvn 使用体验 下载安装使用总结 最近有个项目要使用svn, 但是mac缺乏一款像 Windows 平台 TortoiseSVN 那样全面、高效且便捷的 SVN 客户端工具, 直到博主找到了该工具本文将结合实际使用体验&#xff0c;详细介绍 macSvn工具的核心…

LeetCode 热题 100 394. 字符串解码

LeetCode 热题 100 | 394. 字符串解码 大家好&#xff01;今天我们来探讨一道非常有趣的算法题目——LeetCode 394. 字符串解码。这道题考察了我们对栈这种数据结构的理解和应用能力&#xff0c;同时也涉及到了字符串的处理技巧。接下来&#xff0c;我将详细地为大家解析这道题…

详解一下RabbitMQ中的channel.Publish

函数定义&#xff08;来自 github.com/streadway/amqp&#xff09; func (ch *Channel) Publish(exchange string,key string,mandatory bool,immediate bool,msg Publishing, ) error这个方法的作用是&#xff1a;向指定的交换机 exchange 发送一条消息 msg&#xff0c;带上路…