Vue项目BMI计算器技术实现

简介: 本文介绍基于Vue 3与Nuxt.js开发的BMI计算器工具,涵盖核心计算逻辑(含输入验证、BMI公式实现及四类健康状态判定)与交互式页面实现,代码结构清晰,开箱即用。

BMI计算器工具开发技术实现

本文主要分享一下我最近开发的 BMI 计算器工具的技术实现细节。这个工具基于 Vue 3 和 Nuxt.js 构建,包含核心计算逻辑和交互式的用户界面。我们将重点关注其功能实现部分。

在线工具网址:https://see-tool.com/bmi-calculator

工具截图:
在这里插入图片描述

项目结构

这个工具的实现主要分为两个部分:

  1. 逻辑层utils/bmi-calculator.js —— 负责核心的 BMI 数值计算和状态判定。
  2. 视图层pages/bmi-calculator.vue —— 负责用户交互、输入验证和结果展示。

1. 核心计算逻辑

计算逻辑封装在 calculateBmi 函数中。它接收用户的身高(cm)和体重(kg)作为输入,返回计算后的 BMI 值以及对应的身体状态类别和健康风险等级。

1.1 输入验证

在进行计算之前,我们需要确保输入的数据是有效的数值且大于 0。如果输入无效,函数会抛出一个错误,以便前端捕获处理。

  const height = Number(heightCm)
  const weight = Number(weightKg)

  if (!Number.isFinite(height) || !Number.isFinite(weight) || height <= 0 || weight <= 0) {
   
    throw new Error('INVALID_INPUT')
  }

1.2 BMI 计算公式

BMI 的计算公式是:体重(公斤)除以身高(米)的平方。

  const heightInMeters = height / 100
  // 体重 / (身高^2)
  const bmiRaw = weight / (heightInMeters * heightInMeters)
  // 保留一位小数
  const bmi = Number(bmiRaw.toFixed(1))

1.3 状态判定

根据计算出的 BMI 值,我们可以判定用户的身体状态。这里我们参照了常见的 BMI 标准进行分类:

  • BMI < 18.5: 偏瘦(Underweight),存在营养不良风险。
  • 18.5 ≤ BMI < 24: 正常(Normal),健康风险低。
  • 24 ≤ BMI < 28: 超重(Overweight),通过轻度风险。
  • BMI ≥ 28: 肥胖(Obese),存在较高健康风险。
  if (bmi < 18.5) {
   
    return {
    bmi, categoryKey: 'underweight', riskKey: 'malnutrition' }
  }
  if (bmi < 24) {
   
    return {
    bmi, categoryKey: 'normal', riskKey: 'low' }
  }
  if (bmi < 28) {
   
    return {
    bmi, categoryKey: 'overweight', riskKey: 'mild' }
  }
  return {
    bmi, categoryKey: 'obese', riskKey: 'high' }

2. Vue 页面实现

页面组件主要由输入表单和结果展示两大部分组成。使用 Vue 3 的 Composition API (<script setup>) 来管理状态和逻辑。

2.1 状态管理

我们使用 ref 来定义响应式变量,用于存储用户的输入和计算结果。

const heightCm = ref('')  // 用户输入的身高
const weightKg = ref('')  // 用户输入的体重
const result = ref(null)  // 用于存储计算结果对象,初始为 null

2.2 用户交互处理

计算操作

当用户点击“计算”按钮或在体重输入框按下回车时,会触发 handleCalculate 方法。

该方法首先调用核心计算函数 calculateBmi。如果计算成功,将结果赋值给 result,页面会自动渲染结果区域;如果捕获到错误(如输入无效),则会提示用户。

const handleCalculate = () => {
   
  try {
   
    // 调用工具函数进行计算
    const r = calculateBmi(Number(heightCm.value), Number(weightKg.value))
    result.value = r
  } catch (e) {
   
    // 计算失败,清空结果并提示错误
    result.value = null
    safeMessage('error', '请输入有效的身高和体重')
  }
}

加载示例

为了方便用户快速体验,我们提供了一个 loadExample 方法,一键填入预设的示例数据并触发计算。

const loadExample = () => {
   
  heightCm.value = '170'
  weightKg.value = '65'
  handleCalculate()
}

清空重置

clearForm 方法用于重置所有输入和结果,让用户可以重新开始。

const clearForm = () => {
   
  heightCm.value = ''
  weightKg.value = ''
  result.value = null
}

2.3 结果动态展示

在模板中,我们使用 v-if="result" 来控制结果卡片的显示。只有当 result 有值时,结果区域才会渲染。这种设计保证了页面初始状态的整洁。

结果卡片通过 grid 布局展示了三个关键信息:BMI 数值、身体状态和健康风险。这些信息都直接来自于 result 对象。

<div v-if="result" class="...">
  <!-- BMI 数值 -->
  <p>{
  { result.bmi }}</p>

  <!-- 身体状态分类 -->
  <p>{
  { t(`bmiCalculator.result.categoryMap.${result.categoryKey}`) }}</p>

  <!-- 健康风险评估 -->
  <p>{
  { t(`bmiCalculator.result.riskMap.${result.riskKey}`) }}</p>
</div>

通过将计算逻辑与界面展示分离,我们保持了代码的清晰和可维护性。Vue 强大的响应式系统让我们能够轻松地通过改变数据状态来驱动界面的更新。

相关文章
|
11天前
|
JavaScript
网页源代码查看 在线工具分享
一款基于Vue 3的在线网页源码查看工具,无需安装,支持PC/手机访问。可快速查看HTML源码、提取纯文本、抓取链接、分析表单,并提供User-Agent等进阶参数设置,操作简洁、响应迅速,适合内容校对与页面排查。
825 5
|
10天前
|
存储 自然语言处理 安全
MD5在线加密工具分享
一款基于Nuxt 3开发的MD5在线校验工具,支持文本(含Base64/Hex等格式)与文件(拖拽上传、本地分片计算)快速生成MD5摘要,输出可选Hex/Base64等格式并一键转大写。全程浏览器端处理,隐私安全,专为文件完整性校验设计。
279 2
|
23天前
|
移动开发 JavaScript 前端开发
文件16进制查看器核心JS实现
本文介绍基于 Vue 3 + Nuxt 3 实现的纯前端文件十六进制查看器:无需上传,直接在浏览器中读取任意文件(含二进制),通过 `FileReader` 解析为 `Uint8Array`,并提供格式化(空格/换行/大写)的 Hex 展示与 `.hex` 文件导出功能。
82 14
文件16进制查看器核心JS实现
|
23天前
|
移动开发 JavaScript 安全
文件16进制查看器 在线工具分享
一款基于Vue 3开发的在线文件十六进制查看器,纯前端运行,文件不上传、隐私安全;支持任意格式,提供空格/紧凑/大写三种Hex显示模式,一键复制或下载。即开即用,轻量高效。
228 9
文件16进制查看器 在线工具分享
|
25天前
|
运维 安全 JavaScript
证书信息查看 在线工具分享
这是一款基于Vue 3开发的轻量级在线工具——「证书信息查看」,无需安装、零门槛使用。支持输入域名、粘贴PEM证书或上传文件,秒级解析SSL/TLS证书关键信息(签发者、有效期、域名等),兼顾普通用户、站长与安全爱好者需求,全程本地处理,隐私无忧。
216 11
证书信息查看 在线工具分享
|
26天前
|
缓存 JavaScript 前端开发
Vue3二维码生成器实现方案
本文拆解 Vue3/Nuxt3 二维码生成器实战方案,采用「Vue 管结构与状态、独立 JS 负责 Canvas 绘制」的分层架构。通过 `data-*` 属性定义交互协议,实现类型切换、表单联动、实时预览及 PNG/SVG 导出,兼顾可维护性与跨项目复用性。
110 10
Vue3二维码生成器实现方案
|
6天前
|
JavaScript 测试技术 索引
正则表达式测试 在线工具分享
分享一款实用的在线正则表达式测试工具,支持实时匹配高亮、分组详情查看、g/i/m标志切换、常用模板一键插入及正则替换功能,助你高效验证、提取与处理文本,是开发与学习正则的得力助手!
136 10
|
11天前
|
JSON JavaScript 前端开发
网页源代码查看在线工具 核心JS实现
本文详解“网页源代码查看工具”的核心JS实现:涵盖URL校验、参数组装、请求发送、编码解码、DOM解析提取(源码/文本/表单/链接)及高亮展示等全流程,纯前端驱动,轻量高效。
149 14
|
1月前
|
JSON JavaScript 前端开发
Vue3项目JSON格式化工具技术实现详解
本文详解JSON格式化工具的前端实现,涵盖Composable核心逻辑(格式化、压缩、自动修复)与Vue交互优化(防抖预览、高亮动态加载、实时错误反馈),代码简洁高效,体验流畅。
330 15
Vue3项目JSON格式化工具技术实现详解
|
24天前
|
运维 前端开发 安全
文本差异对比器 在线工具分享
日常工作中常需对比文本/代码差异,肉眼识别易错低效。推荐我开发的在线工具——文本差异对比器,支持行/词/字符三级对比,红删绿增高亮显示,可忽略空格/大小写,纯前端运行,隐私安全,响应式设计,即开即用。
172 1

热门文章

最新文章