本教學打造出了一個互動式的“彈性面板”界面,使用了 Vue 3 Composition API 和 CSS 的 flexbox 布局和過渡動畫。主要功能如下
該範例 使用 Vue 3 的 Composition API 來實現面板的展開與動畫效果。
setup
函數setup
函數是 Vue 3 Composition API 的核心,用於定義組件的邏輯和狀態。在這裡,我使用 setup
來初始化面板的資料,並定義與面板互動的邏輯。該函數返回的資料和方法會暴露給模板使用。
setup() {
const panels = reactive([
{
class: "panel1",
text1: "Hey",
text2: "Let's",
text3: "Dance",
isOpen: false,
isActive: false,
},
// 其他面板資料
]);
// 其他邏輯
return {
panels,
toggleOpen,
toggleActive,
};
}
reactive 用於創建響應式資料。這裡我使用 reactive 來定義 panels,它是一個包含面板資訊的陣列,每個面板都有對應的 CSS 類別、文本內容,以及控制展開和動畫的狀態變量 isOpen 和 isActive。
const panels = reactive([
{
class: "panel1",
text1: "Hey",
text2: "Let's",
text3: "Dance",
isOpen: false,
isActive: false,
},
// 其他面板
]);
toggleOpen 函數用來切換面板的展開狀態。當使用者點擊某個面板時,對應的面板的 isOpen 屬性會在 true 和 false 之間切換,從而觸發 CSS 過渡效果,改變面板的大小和顯示更多文字。
const toggleOpen = (index) => {
panels[index].isOpen = !panels[index].isOpen;
};
toggleActive 函數用來在 CSS 過渡結束時切換 isActive 狀態。當過渡效果完成並且屬性名稱包含 flex 時,該函數會切換面板的 isActive 狀態,觸發文字的上下滑動效果。
const toggleActive = (index, event) => {
if (event.propertyName.includes("flex")) {
panels[index].isActive = !panels[index].isActive;
}
};
在模板中,我使用 v-for 迴圈來渲染每個面板,並透過 @click 事件來綁定 toggleOpen 函數,透過 @transitionend 事件來監聽過渡效果的結束,從而調用 toggleActive 函數。
<div class="panels">
<div
v-for="(panel, index) in panels"
:key="index"
:class="['panel', panel.class, { open: panel.isOpen, 'open-active': panel.isActive }]"
@click="toggleOpen(index)"
@transitionend="toggleActive(index, $event)"
>
<p></p>
<p></p>
<p></p>
</div>
</div>
這段程式碼使用了 Vue 3 的 Composition API,包括 setup 函數、reactive、以及方法的定義,來實現面板的展開與動畫效果。toggleOpen 和 toggleActive 函數負責處理面板的展開和過渡動畫的切換。透過 Composition API 的靈活性,可以更方便地管理響應式狀態和事件處理邏輯。