Files
breadcrumb-multistepform-we…/app.js

57 lines
1.6 KiB
JavaScript
Raw Normal View History

2026-02-10 07:52:18 +00:00
const steps = Array.from(document.querySelectorAll(".step"));
const dots = Array.from(document.querySelectorAll(".dot"));
const progressBar = document.getElementById("progress-bar");
const form = document.getElementById("lead-form");
const toast = document.getElementById("toast");
let currentStep = 1;
const answers = {};
const updateProgress = () => {
const progress = ((currentStep - 1) / (steps.length - 1)) * 100;
progressBar.style.width = `${progress}%`;
dots.forEach((dot, index) => {
dot.classList.toggle("active", index < currentStep);
});
};
const showStep = (step) => {
steps.forEach((section) => {
section.classList.remove("active", "fade-in");
if (Number(section.dataset.step) === step) {
section.classList.add("active");
requestAnimationFrame(() => section.classList.add("fade-in"));
}
});
currentStep = step;
updateProgress();
};
const handleOptionClick = (event) => {
const button = event.target.closest(".option");
if (!button) return;
const step = Number(button.closest(".step").dataset.step);
const nextStep = Number(button.dataset.next);
const value = button.dataset.value;
answers[`step${step}`] = value;
showStep(nextStep);
};
form.addEventListener("click", handleOptionClick);
form.addEventListener("submit", (event) => {
event.preventDefault();
const data = new FormData(form);
answers.firstname = data.get("firstname");
answers.email = data.get("email");
toast.classList.add("show");
setTimeout(() => toast.classList.remove("show"), 2400);
alert("Vielen Dank! Ihre Anfrage ist eingegangen.");
form.reset();
showStep(1);
});
showStep(1);