Dev to webs {Coding…}

เรียนรู้การพัฒนาซอฟเวอร์ เพื่อความรู้ที่ยั่งยืน

บทที่ 23: การสร้าง Transition แบบกำหนดเอง


1. ความเข้าใจเกี่ยวกับ Transition แบบกำหนดเอง

Transition แบบกำหนดเองใน Alpine.js ช่วยให้คุณสามารถควบคุมการแสดงผลขององค์ประกอบ (Element) ได้อย่างละเอียด โดยใช้ CSS หรือ JavaScript เพื่อปรับแต่งลักษณะการแสดงและซ่อนองค์ประกอบตามต้องการ


2. การสร้าง Transition ด้วย CSS

ตัวอย่าง: ใช้คลาส CSS สำหรับ Transition
<style>
    .custom-enter {
        opacity: 0;
        transform: translateY(-10px);
    }
    .custom-enter-active {
        opacity: 1;
        transform: translateY(0);
        transition: all 0.3s ease-out;
    }
    .custom-leave {
        opacity: 1;
        transform: translateY(0);
    }
    .custom-leave-active {
        opacity: 0;
        transform: translateY(-10px);
        transition: all 0.3s ease-in;
    }
</style>

<div x-data="{ isVisible: false }">
    <button @click="isVisible = !isVisible">Toggle</button>
    <div x-show="isVisible" 
         x-transition:enter="custom-enter" 
         x-transition:enter-active="custom-enter-active" 
         x-transition:leave="custom-leave" 
         x-transition:leave-active="custom-leave-active" 
         style="background: lightblue; padding: 10px;">
        <p>This content has a custom CSS transition!</p>
    </div>
</div>

คำอธิบาย:

  • ใช้คลาส .custom-enter และ .custom-leave กำหนดสถานะเริ่มต้นของ Transition
  • ใช้คลาส .custom-enter-active และ .custom-leave-active กำหนดการเปลี่ยนแปลงระหว่างสถานะ

3. การสร้าง Transition ด้วย JavaScript

ตัวอย่าง: ใช้ JavaScript สร้าง Transition แบบกำหนดเอง
<div x-data="{ isVisible: false }">
    <button @click="isVisible = !isVisible">Toggle</button>
    <div x-show="isVisible"
         x-transition:enter-start="$el.style.opacity = 0; $el.style.transform = 'scale(0.95)';"
         x-transition:enter="$el.style.transition = 'all 0.5s';"
         x-transition:enter-end="$el.style.opacity = 1; $el.style.transform = 'scale(1)';"
         x-transition:leave-start="$el.style.opacity = 1; $el.style.transform = 'scale(1)';"
         x-transition:leave="$el.style.transition = 'all 0.5s';"
         x-transition:leave-end="$el.style.opacity = 0; $el.style.transform = 'scale(0.95)';"
         style="background: lightgreen; padding: 10px;">
        <p>This content has a custom JavaScript transition!</p>
    </div>
</div>

คำอธิบาย:

  • ใช้ $el เพื่ออ้างถึงองค์ประกอบ (Element) ปัจจุบัน
  • x-transition:enter-start และ x-transition:leave-end ใช้กำหนดสถานะเริ่มต้นและสุดท้ายของ Transition
  • ใช้ JavaScript ปรับคุณสมบัติ CSS ขององค์ประกอบ

4. การใช้ Transition แบบกำหนดเองกับ Overlay และ Modal

ตัวอย่าง: Modal พร้อม Transition แบบกำหนดเอง
<style>
    .overlay {
        opacity: 0;
        transition: opacity 0.3s ease;
    }
    .overlay-active {
        opacity: 1;
    }
    .modal {
        opacity: 0;
        transform: scale(0.9);
        transition: all 0.3s ease;
    }
    .modal-active {
        opacity: 1;
        transform: scale(1);
    }
</style>

<div x-data="{ isModalOpen: false }">
    <button @click="isModalOpen = true">Open Modal</button>

    <!-- Overlay -->
    <div x-show="isModalOpen"
         x-transition:enter="overlay"
         x-transition:enter-end="overlay-active"
         x-transition:leave="overlay-active"
         x-transition:leave-end="overlay"
         style="background: rgba(0,0,0,0.5); position: fixed; top: 0; left: 0; width: 100%; height: 100%;"></div>

    <!-- Modal -->
    <div x-show="isModalOpen"
         x-transition:enter="modal"
         x-transition:enter-end="modal-active"
         x-transition:leave="modal-active"
         x-transition:leave-end="modal"
         style="background: white; padding: 20px; max-width: 400px; margin: 50px auto; position: relative;">
        <h2>Modal Title</h2>
        <p>This is the modal content.</p>
        <button @click="isModalOpen = false">Close</button>
    </div>
</div>

คำอธิบาย:

  • ใช้คลาส .overlay และ .modal เพื่อกำหนด Transition ของ Overlay และ Modal
  • คลาส .overlay-active และ .modal-active ใช้สำหรับสถานะที่แสดงผล

5. ข้อดีของ Transition แบบกำหนดเอง

  1. ความยืดหยุ่น:
    • สามารถปรับแต่ง Transition ให้ตรงกับดีไซน์ที่ต้องการ
  2. การจัดการสถานะ:
    • รองรับการกำหนดสถานะแยกกันสำหรับการแสดงและซ่อน
  3. ใช้ได้ทั้ง CSS และ JavaScript:
    • เลือกวิธีที่เหมาะสมตามความต้องการและสถานการณ์

6. ข้อควรระวังในการสร้าง Transition แบบกำหนดเอง

  1. ประสิทธิภาพ:
    • อย่าใช้ Transition ที่ซับซ้อนเกินไปกับองค์ประกอบจำนวนมาก
  2. ความเข้ากันได้ของเบราว์เซอร์:
    • ตรวจสอบว่า CSS หรือ JavaScript Transition ใช้งานได้ในเบราว์เซอร์เป้าหมาย
  3. การจัดการความยาวของ Transition:
    • ควรตั้งค่า Duration และ Delay ให้เหมาะสม ไม่ยาวหรือสั้นเกินไป

สรุป

ในบทนี้ คุณได้เรียนรู้วิธีสร้าง Transition แบบกำหนดเองใน Alpine.js ด้วยการใช้ CSS และ JavaScript ตัวอย่างแสดงให้เห็นถึงความยืดหยุ่นและความสามารถในการปรับแต่ง Transition ให้ตรงตามความต้องการ ในบทถัดไป เราจะพูดถึงการใช้ x-effect เพื่อจัดการกับ State แบบ Reactive!