首頁 > web前端 > js教程 > 使用動畫建立高級多步驟表單

使用動畫建立高級多步驟表單

Susan Sarandon
發布: 2024-12-05 22:21:10
原創
182 人瀏覽過

Building a Premium Multi-Step Form with Animations

在本教學中,我們將逐步使用 HTML、CSS 和 JavaScript 建立具有流暢動畫和用戶端驗證的高階互動多步驟表單。此表單提供了增強的用戶體驗,看起來就像直接來自 2025 年的東西!

現場示範:https://codepen.io/HanGPIIIErr/pen/ZYzbrqW

目錄

  1. 簡介
  2. 先決條件
  3. 專案結構
  4. HTML 標記
  5. 使用 CSS 樣式
  6. 使用 JavaScript 加入互動性
  7. 結論

1.簡介

多步驟表單是將冗長的表單分解為可管理的部分,是增強使用者體驗的絕佳方法。在本教程中,我們將建立一個五步驟表單,其中包括:

  • 個人資料
  • 偏好設定
  • 圖片上傳
  • 評論
  • 總結並提交

我們將在步驟之間添加流暢的動畫並驗證使用者輸入以確保資料完整性。

先決條件

對 HTML、CSS 和 JavaScript 的基本了解
熟悉 JavaScript 中的表單元素與事件處理

專案結構

我們將有三個主要文件:

index.html — HTML 結構
style.css — 我們表單的樣式
script.js — 處理表單互動的 JavaScript
讓我們從設定 HTML 檔案開始。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Premium Multi-Step Form</title>
    <link href="https://fonts.googleapis.com/css?family=Poppins:300,400,600&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <form>



<p>Explanation</p>

<ul>
<li>Form Steps: Each step is wrapped in a div with the class form-step.</li>
<li>Active Class: The first step has the class active to display it initially.</li>
<li>Navigation Buttons: Each step (except the first and last) has "Previous" and "Next" buttons.</li>
<li>Summary Section: The last step displays a summary of the entered information.</li>
</ul>

<p>Styling with CSS</p>

<p>Now, let's style our form to give it that premium feel.<br>
</p>

<pre class="brush:php;toolbar:false">/* style.css */

body {
    font-family: 'Poppins', sans-serif;
    background: linear-gradient(135deg, #1abc9c, #16a085);
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    overflow: hidden;
}

form {
    width: 90%;
    max-width: 600px;
    background: rgba(255, 255, 255, 0.95);
    padding: 3em;
    border-radius: 20px;
    box-shadow: 0 15px 25px rgba(0, 0, 0, 0.2);
    backdrop-filter: blur(10px);
    position: relative;
    overflow: hidden;
}

.form-step {
    position: absolute;
    width: 100%;
    opacity: 0;
    transform: scale(0.8) translateY(50px);
    transition: all 0.5s ease;
}

.form-step.active {
    opacity: 1;
    transform: scale(1) translateY(0);
    position: relative;
}

.step-header {
    position: absolute;
    top: -30px;
    right: 30px;
    background: #16a085;
    color: #fff;
    padding: 0.5em 1em;
    border-radius: 30px;
    font-weight: 600;
    animation: slideIn 0.5s forwards;
}

h2 {
    margin-bottom: 1em;
    color: #333;
    font-weight: 600;
    text-align: center;
    animation: fadeInDown 0.5s ease-in-out;
}

label {
    display: block;
    margin-top: 1em;
    color: #555;
    font-weight: 500;
    animation: fadeInUp 0.5s ease-in-out;
}

input[type="text"],
input[type="email"],
input[type="file"],
textarea {
    width: 100%;
    padding: 0.75em 1em;
    margin-top: 0.5em;
    border: 2px solid #ddd;
    border-radius: 10px;
    font-size: 1em;
    outline: none;
    transition: border-color 0.3s;
    animation: fadeInUp 0.5s ease-in-out;
}

input:focus,
textarea:focus {
    border-color: #1abc9c;
}

input[type="checkbox"] {
    margin-right: 0.5em;
}

.buttons {
    display: flex;
    justify-content: space-between;
    margin-top: 2em;
    animation: fadeInUp 0.5s ease-in-out;
}

button {
    padding: 0.75em 2em;
    border: none;
    border-radius: 30px;
    cursor: pointer;
    font-size: 1em;
    font-weight: 600;
    transition: background 0.3s, transform 0.3s, box-shadow 0.3s;
}

.next-step,
.prev-step {
    background: #1abc9c;
    color: #fff;
}

.next-step:hover,
.prev-step:hover {
    background: #16a085;
    transform: translateY(-3px);
    box-shadow: 0 8px 15px rgba(0, 0, 0, 0.1);
}

button[type="submit"] {
    background: #e74c3c;
    color: #fff;
    margin-left: auto;
}

button[type="submit"]:hover {
    background: #c0392b;
    transform: translateY(-3px);
    box-shadow: 0 8px 15px rgba(0, 0, 0, 0.1);
}

#summary p {
    margin: 1em 0;
    color: #333;
    font-weight: 500;
    animation: fadeInUp 0.5s ease-in-out;
}

/* Animations */
@keyframes fadeInUp {
    from {
        opacity: 0;
        transform: translateY(30px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

@keyframes fadeInDown {
    from {
        opacity: 0;
        transform: translateY(-30px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

@keyframes slideIn {
    from {
        opacity: 0;
        transform: translateX(30px);
    }
    to {
        opacity: 1;
        transform: translateX(0);
    }
}
登入後複製

說明

  • 背景漸層:平滑的漸層提供現代感。
  • 表單樣式:我們使用背景濾鏡來實現玻璃形狀效果。
  • 過渡和動畫:平滑過渡和關鍵影格動畫增強了互動性。
  • 按鈕效果:懸停效果,帶有輕微的移動和陰影深度。
  • 使用 JavaScript 加入互動性

讓我們的表單發揮作用。

document.addEventListener('DOMContentLoaded', function() {
    const form = document.getElementById('multi-step-form');
    const steps = document.querySelectorAll('.form-step');
    const nextBtns = document.querySelectorAll('.next-step');
    const prevBtns = document.querySelectorAll('.prev-step');
    const summary = document.getElementById('summary');
    let currentStep = 0;

    nextBtns.forEach(btn => {
        btn.addEventListener('click', () => {
            if (validateStep()) {
                steps[currentStep].classList.remove('active');
                currentStep++;
                if (currentStep < steps.length) {
                    steps[currentStep].classList.add('active');
                }
                if (currentStep === steps.length - 1) {
                    displaySummary();
                }
            }
        });
    });

    prevBtns.forEach(btn => {
        btn.addEventListener('click', () => {
            steps[currentStep].classList.remove('active');
            currentStep--;
            steps[currentStep].classList.add('active');
        });
    });

    form.addEventListener('submit', (e) => {
        e.preventDefault();
        alert('Form successfully submitted!');
        form.reset();
        steps[currentStep].classList.remove('active');
        currentStep = 0;
        steps[currentStep].classList.add('active');
    });

    function validateStep() {
        let stepIsValid = true;
        const currentInputs = steps[currentStep].querySelectorAll('input, textarea');
        currentInputs.forEach(input => {
            if (!input.checkValidity()) {
                input.reportValidity();
                stepIsValid = false;
            }
        });
        return stepIsValid;
    }

    function displaySummary() {
        const name = document.getElementById('name').value || 'N/A';
        const email = document.getElementById('email').value || 'N/A';
        const prefs = Array.from(document.querySelectorAll('input[name="pref"]:checked')).map(el => el.value).join(', ') || 'None';
        const comments = document.getElementById('comments').value || 'None';

        summary.innerHTML = `
            <p><strong>Name:</strong> ${name}</p>
            <p><strong>Email:</strong> ${email}</p>
            <p><strong>Preferences:</strong> ${prefs}</p>
            <p><strong>Comments:</strong> ${comments}</p>
        `;
    }

    // Initialize steps
    steps.forEach((step, index) => {
        if (index !== currentStep) {
            step.classList.remove('active');
        } else {
            step.classList.add('active');
        }
    });
});
登入後複製

說明

  • 事件偵聽器:用於在步驟之間導覽的「下一步」和「上一步」按鈕。
  • 驗證:validateStep() 確保填寫必填欄位。
  • 摘要顯示:displaySummary()將輸入的資料編譯出來供使用者查看。
  • 表單提交:提交後,表單將重設並返回第一步。

?結論:打造角鬥士之戰的未來

角鬥士之戰的最新增強功能標誌著向所有玩家提供無縫且迷人的體驗的重大飛躍。憑藉豐富的教程系統、模組化組件、蓬勃發展的公會生態系統和優化的小遊戲,該遊戲正在進化為終極角斗RPG。

無論您是第一次探索競技場的新人,還是主宰戰場的經驗豐富的戰士,這些更新都確保每個人都可以打造自己的史詩遺產。

?加入旅程吧!

我們正在積極尋求玩家和開發者的回饋。深入了解《角鬥士之戰》並與我們分享您的想法。

?網址:https://gladiatorsbattle.com
?️ 在 Kickstarter 上支持我們:https://www.kickstarter.com/projects/gladiatorsbattle/gladiators-battle-forge-your-legend-in-the-ultimate-arena
?在 X(以前稱為 Twitter)上關注我們:https://x.com/GladiatorsBT
?聯絡 LinkedIn 上:https://www.linkedin.com/in/pierre-romain-lopez
?加入 Discord 社群:https://discord.gg/YBNF7KjGwx

感謝您對我們繼續發展《角鬥士之戰》的堅定支持。您的回饋、想法和熱情是我們進步的動力。

讓冒險繼續下去吧,角鬥士們! ?✨

如果您有任何疑問或建議,請在下方留言!

以上是使用動畫建立高級多步驟表單的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板