WhatsApp

  
Creando un Indicador de Progreso Interactivo
HTML, CSS y JavaScript

En el desarrollo web, a menudo encontramos la necesidad de guiar al usuario a través de una serie de pasos. Ya sea para un formulario de registro, un proceso de pago o cualquier otro flujo de trabajo, mostrar un indicador visual del progreso puede mejorar significativamente la experiencia del usuario. En este blog, aprenderemos cómo crear un indicador de progreso interactivo utilizando HTML, CSS y JavaScript.


HTML

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<link rel="stylesheet" href="style.css">

<title>Indicador de Progreso</title>

</head>

<body>

<div class="container">

<div class="progress-container">

<div class="progress" id="progress"></div>

<div class="circle active">1</div>

<div class="circle">2</div>

<div class="circle">3</div>

<div class="circle">4</div>

</div>

<button class="btn" id="prev" disabled>Anterior</button>

<button class="btn" id="next">Siguiente</button>

</div>

<script src="script.js"></script>

</body>

</html>


CSS

@import url('https://fonts.googleapis.com/css?family=Muli&display=swap');



:root {

--line-border-fill: #3498db;

--line-border-empty: #383838;

}



* {

box-sizing: border-box;

}



body {

background-color: #f1f1f1;

font-family: 'Muli', sans-serif;

display: flex;

align-items: center;

justify-content: center;

height: 100vh;

overflow: hidden;

margin: 0;

}



.container {

text-align: center;

}



.progress-container {

display: flex;

justify-content: space-between;

position: relative;

margin-bottom: 30px;

max-width: 100%;

width: 350px;

}



.progress-container::before {

content: '';

background-color: var(--line-border-empty);

position: absolute;

top: 50%;

left: 0;

transform: translateY(-50%);

height: 4px;

width: 100%;

z-index: -1;

}



.progress {

background-color: var(--line-border-fill);

position: absolute;

top: 50%;

left: 0;

transform: translateY(-50%);

height: 4px;

width: 0%;

z-index: -1;

transition: 0.4s ease;

}



.circle {

background-color: #f1f1f1;

color:#e2e2e2;

border-radius: 50%;

height: 30px;

width: 30px;

display: flex;

align-items: center;

justify-content: center;

border: 3px solid var(--line-border-empty);

transition: 0.4s ease;

}



.circle.active {

border-color: var(--line-border-fill);

}



.btn {

background-color: var(--line-border-fill);

color: #fff;

border: 0;

border-radius: 6px;

cursor: pointer;

font-family: inherit;

padding: 8px 30px;

margin: 5px;

font-size: 14px;

}



.btn:active {

transform: scale(0.98);

}



.btn:focus {

outline: 0;

}



.btn:disabled {

background-color: var(--line-border-empty);

cursor: not-allowed;

}


JS

const progress = document.getElementById('progress');

const prev = document.getElementById('prev');

const next = document.getElementById('next');

const circles = document.querySelectorAll('.circle');



let currentActive = 1;



next.addEventListener('click', () => {

currentActive++;



if (currentActive > circles.length) {

currentActive = circles.length;

}



update();

});



prev.addEventListener('click', () => {

currentActive--;



if (currentActive < 1) {

currentActive = 1;

}



update();

});



function update() {

circles.forEach((circle, idx) => {

if (idx < currentActive) {

circle.classList.add('active');

} else {

circle.classList.remove('active');

}

});



const actives = document.querySelectorAll('.active');



progress.style.width = (actives.length - 1) / (circles.length - 1) * 100 + '%';



if (currentActive === 1) {

prev.disabled = true;

} else if (currentActive === circles.length) {

next.disabled = true;

} else {

prev.disabled = false;

next.disabled = false;

}

}



update(); // Call update initially to set the default state


Vista Previa Funcionamiento:

 
 


¡Contáctanos!

Si tienes preguntas, aclaraciones, sugerencias de temas o cualquier otra consulta, ¡no dudes en ponerte en contacto con nosotros! Por favor, completa el formulario de contacto disponible en este enlace, y estaremos encantados de ayudarte.

Si quieres acceder a mi GitHub para tener acceso a este código y a muchos más accede en el siguiente link


Sebastian Granados 28 mayo, 2024
Compartir


Iniciar sesión dejar un comentario

  
Ejercicio 5 - Carga borrosa
Javascript, HTML, CSS