🔥 Creando una Calculadora de TMB Web

La Tasa Metabólica Basal (TMB) es una medida crucial para entender las necesidades calóricas diarias de una persona. En este artículo, aprenderemos cómo crear una calculadora de TMB web precisa y fácil de usar.

¿Qué es la TMB?

La TMB es la cantidad de calorías que tu cuerpo quema en reposo para mantener las funciones vitales básicas. Se calcula utilizando factores como el género, la edad, el peso y la altura.

Fórmula de Mifflin-St Jeor:

Planificación de la Calculadora

Antes de comenzar a codificar, definamos las características principales de nuestra calculadora:

Estructura HTML

Comencemos con la estructura básica de nuestra calculadora:

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Calculadora de TMB</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="container">
        <h1>Calculadora de TMB</h1>
        <div class="calculator-section">
            <div class="input-group">
                <label>Género</label>
                <div class="radio-group">
                    <label>
                        <input type="radio" name="gender" value="male" checked>
                        Masculino
                    </label>
                    <label>
                        <input type="radio" name="gender" value="female">
                        Femenino
                    </label>
                </div>
            </div>
            <div class="input-group">
                <label for="age">Edad (años)</label>
                <input type="number" id="age" min="1" max="120">
            </div>
            <div class="input-group">
                <label for="weight">Peso (kg)</label>
                <input type="number" id="weight" step="0.1">
            </div>
            <div class="input-group">
                <label for="height">Altura (cm)</label>
                <input type="number" id="height">
            </div>
            <div class="input-group">
                <label for="activity">Nivel de Actividad</label>
                <select id="activity">
                    <option value="1.2">Sedentario (poco o ningún ejercicio)</option>
                    <option value="1.375">Ligeramente activo (ejercicio ligero 1-3 días/semana)</option>
                    <option value="1.55">Moderadamente activo (ejercicio moderado 3-5 días/semana)</option>
                    <option value="1.725">Muy activo (ejercicio intenso 6-7 días/semana)</option>
                    <option value="1.9">Extremadamente activo (ejercicio muy intenso, trabajo físico)</option>
                </select>
            </div>
            <button id="calculateBtn">Calcular TMB</button>
            <div id="result" class="result"></div>
            <div id="tdee" class="tdee"></div>
        </div>
    </div>
    <script src="script.js"></script>
</body>
</html>

Estilos CSS

Añadamos estilos para hacer que nuestra calculadora se vea profesional:

/* Estilos generales */
body {
    font-family: Arial, sans-serif;
    line-height: 1.6;
    margin: 0;
    padding: 20px;
    background-color: #f5f5f5;
}

.container {
    max-width: 600px;
    margin: 0 auto;
    background-color: white;
    padding: 20px;
    border-radius: 8px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}

/* Estilos de entrada */
.input-group {
    margin-bottom: 15px;
}

label {
    display: block;
    margin-bottom: 5px;
    font-weight: bold;
}

input, select {
    width: 100%;
    padding: 8px;
    border: 1px solid #ddd;
    border-radius: 4px;
    font-size: 16px;
}

.radio-group {
    display: flex;
    gap: 20px;
}

.radio-group label {
    display: flex;
    align-items: center;
    gap: 5px;
    font-weight: normal;
}

/* Estilos de botón */
button {
    background-color: #4CAF50;
    color: white;
    padding: 10px 20px;
    border: none;
    border-radius: 4px;
    cursor: pointer;
    font-size: 16px;
    width: 100%;
}

button:hover {
    background-color: #45a049;
}

/* Estilos de resultado */
.result, .tdee {
    margin-top: 20px;
    padding: 15px;
    background-color: #f9f9f9;
    border-radius: 4px;
    text-align: center;
    font-size: 18px;
    font-weight: bold;
}

.tdee {
    background-color: #e3f2fd;
    color: #1976d2;
}

Lógica JavaScript

Implementemos la lógica de cálculo de la TMB:

// Función para calcular la TMB
function calculateBMR(gender, age, weight, height) {
    if (gender === 'male') {
        return (10 * weight) + (6.25 * height) - (5 * age) + 5;
    } else {
        return (10 * weight) + (6.25 * height) - (5 * age) - 161;
    }
}

// Función para calcular el TDEE (Gasto Energético Total Diario)
function calculateTDEE(bmr, activityLevel) {
    return bmr * activityLevel;
}

// Función para mostrar los resultados
function displayResults(bmr, tdee) {
    const resultDiv = document.getElementById('result');
    const tdeeDiv = document.getElementById('tdee');
    
    resultDiv.textContent = `Tu TMB es: ${Math.round(bmr)} calorías/día`;
    tdeeDiv.textContent = `Tu TDEE es: ${Math.round(tdee)} calorías/día`;
}

// Event listener para el botón de cálculo
document.getElementById('calculateBtn').addEventListener('click', function() {
    const gender = document.querySelector('input[name="gender"]:checked').value;
    const age = parseFloat(document.getElementById('age').value);
    const weight = parseFloat(document.getElementById('weight').value);
    const height = parseFloat(document.getElementById('height').value);
    const activityLevel = parseFloat(document.getElementById('activity').value);
    
    if (isNaN(age) || isNaN(weight) || isNaN(height)) {
        alert('Por favor, ingresa valores válidos para todos los campos.');
        return;
    }
    
    const bmr = calculateBMR(gender, age, weight, height);
    const tdee = calculateTDEE(bmr, activityLevel);
    displayResults(bmr, tdee);
});

Mejoras y Características Adicionales

Para hacer nuestra calculadora más útil, podemos añadir varias mejoras:

Consideraciones de UX

Para crear una experiencia de usuario óptima, debemos considerar:

Conclusión

Hemos creado una calculadora de TMB web funcional y fácil de usar. Esta implementación básica puede ser extendida con más características según las necesidades. Algunas ideas para futuras mejoras incluyen:

¡Espero que este tutorial te haya sido útil! Si tienes alguna pregunta o sugerencia, no dudes en dejarla en los comentarios.