Se debe mostrar una imagen y mediante un control input de tipo range poder seleccionar el índice de masa corporal. Modificar la imagen que se muestra según el valor del control range.
Disponemos de 8 imágenes con los siguientes nombres:
persona1.png persona2.png persona3.png persona4.png persona5.png persona6.png persona7.png persona8.png
La página debe ser similar a:

La lectura de la solución debería efectuarse luego de haber intentado resolverlo en forma individual.
La página HTML es:
index.html
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Prueba</title>
<link rel="stylesheet" href="estilos.css">
</head>
<body>
<div id="contenedor">
<div>
<div id="persona">
</div>
<div>
<input type="range" min="1" max="8" id="rango" value="1" list="valores">
<datalist id="valores">
<option value="1">
<option value="2">
<option value="3">
<option value="4">
<option value="5">
<option value="6">
<option value="7">
<option value="8">
</datalist>
</div>
<div>
<p id="grasa">5-9% grasa corporal</p>
</div>
</div>
</div>
<script src="funciones.js"></script>
</body>
</html>
Mediante JavaScript agregaremos un elemento 'img' en el div:
<div id="persona">
Por otro lado disponemos un control 'range' con 8 valores posibles entre 1 y 8 (que son las imágenes a mostrar según el valor seleccionado):
<input type="range" min="1" max="8" id="rango" value="1" list="valores">
<datalist id="valores">
<option value="1">
<option value="2">
<option value="3">
<option value="4">
<option value="5">
<option value="6">
<option value="7">
<option value="8">
</datalist>
En un párrafo mostraremos el índice de masa corporal seleccionado:
<p id="grasa">5-9% grasa corporal</p>
La hoja de estilo para mostrar la información.
estilos.css
#rango {
width: 250px;
}
#contenedor {
display: flex;
justify-content: center;
width: 100%;
}
Toda la funcionalidad se encuentra en el archivo JavaScript.
funciones.js
const leyendas = ["5-9% grasa corporal", "10-14% grasa corporal", "15-19% grasa corporal", "20-24% grasa corporal",
"25-29% grasa corporal", "30-34% grasa corporal", "35-39% grasa corporal", ">40% grasa corporal"
]
let nro = 1
document.querySelector("#persona").innerHTML = `<img src="persona${nro}.png" id="imagen">`
document.querySelector("#rango").addEventListener("input", () => {
nro = parseInt(document.querySelector("#rango").value)
document.querySelector("#imagen").setAttribute("src", `persona${nro}.png`)
document.querySelector("#grasa").innerText = leyendas[nro - 1]
})
Definimos un vector con los distintos mensajes a mostrar según el índice de masa corporal seleccionado:
const leyendas = ["5-9% grasa corporal", "10-14% grasa corporal", "15-19% grasa corporal", "20-24% grasa corporal",
"25-29% grasa corporal", "30-34% grasa corporal", "35-39% grasa corporal", ">40% grasa corporal"
]
La imágen a mostrar por defecto es la 1:
let nro = 1
Creamos el elemento 'img' con la imagen 'persona1.png':
document.querySelector("#persona").innerHTML = `<img src="persona${nro}.png" id="imagen">`
Configuramos la captura del evento 'input' que se dispara cada vez que cambiamos de valor del control visual 'range' de la página:
document.querySelector("#rango").addEventListener("input", () => {
nro = parseInt(document.querySelector("#rango").value)
document.querySelector("#imagen").setAttribute("src", `persona${nro}.png`)
document.querySelector("#grasa").innerText = leyendas[nro - 1]
})
El algoritmo cuando se dispara consiste en extraer el valor seleccionado del control 'range':
nro = parseInt(document.querySelector("#rango").value)
Cambiamos la propiedad 'src' de la imagen con la nueva persona que se debe mostrar:
document.querySelector("#imagen").setAttribute("src", `persona${nro}.png`)
Y finalmente actualizamos el índice de masa corporal:
document.querySelector("#grasa").innerText = leyendas[nro - 1]