一文搞懂Vue里的過渡和動畫
過渡的 CSS 類名
Vue的過渡功能是通過添加CSS類名來實現(xiàn)過渡效果。在過渡過程中,Vue會根據(jù)不同的階段給元素添加不同的CSS類名,如v-enter、v-enter-active、v-leave、v-leave-active等。適用于需要在組件之間添加平滑過渡效果的場景,如淡入淡出、滑動等。
<template>
<transition name="fade">
<p v-if="show">This is a fading element.</p>
</transition>
<button @click="toggleShow">Toggle Show</button>
</template>
<style>
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.5s;
}
.fade-enter,
.fade-leave-to {
opacity: 0;
}
</style>
<script>
export default {
data() {
return {
show: false
};
},
methods: {
toggleShow() {
this.show = !this.show;
}
}
};
</script>條件過渡的 CSS 類名
Vue還支持根據(jù)條件動態(tài)添加過渡的CSS類名。可以使用:class綁定來根據(jù)條件動態(tài)添加過渡的CSS類名,適用于根據(jù)條件動態(tài)切換過渡效果的場景,根據(jù)不同的條件添加不同的過渡效果。
<template>
<transition :name="transitionName">
<p v-if="show">This is a dynamic transition element.</p>
</transition>
<button @click="toggleShow">Toggle Show</button>
</template>
<script>
export default {
data() {
return {
show: false,
transitionName: 'fade'
};
},
methods: {
toggleShow() {
this.show = !this.show;
this.transitionName = this.show ? 'slide' : 'fade';
}
}
};
</script>JavaScript 鉤子函數(shù)
Vue提供了一些JavaScript鉤子函數(shù),用于在過渡過程中執(zhí)行自定義的JavaScript代碼??梢允褂?code>beforeEnter、enter、afterEnter、beforeLeave、leave、afterLeave等鉤子函數(shù)來執(zhí)行自定義的過渡邏輯。適用于需要在過渡過程中執(zhí)行自定義的JavaScript邏輯的場景,如動態(tài)修改元素樣式等。
<template>
<transition
@before-enter="beforeEnter"
@enter="enter"
@after-enter="afterEnter"
@before-leave="beforeLeave"
@leave="leave"
@after-leave="afterLeave"
>
<p v-if="show">This is a custom transition element.</p>
</transition>
<button @click="toggleShow">Toggle Show</button>
</template>
<script>
export default {
data() {
return {
show: false
};
},
methods() {
beforeEnter(el) {
console.log('Before Enter');
el.style.opacity = 0;
},
enter(el, done) {
console.log('Enter');
setTimeout(() => {
el.style.opacity = 1;
done();
}, 1000);
},
afterEnter(el) {
console.log('After Enter');
},
beforeLeave(el) {
console.log('Before Leave');
el.style.opacity = 1;
},
leave(el, done) {
console.log('Leave');
setTimeout(() => {
el.style.opacity = 0;
done();
}, 1000);
},
afterLeave(el) {
console.log('After Leave');
},
toggleShow() {
this.show = !this.show;
}
}
}
</script>列表過渡
Vue提供了專門的列表過渡功能,用于在列表中添加過渡效果??梢允褂?code><transition-group>組件來包裹列表項,并使用v-move、v-enter、v-leave等CSS類名來定義列表項的過渡效果。 適用于在列表中添加過渡效果的場景,如列表項的漸顯、滑動等過渡效果。
<template>
<transition-group name="list" tag="ul">
<li v-for="item in items" :key="item.id">{{ item.text }}</li>
</transition-group>
<button @click="addItem">Add Item</button>
</template>
<style>
.list-enter-active,
.list-leave-active {
transition: all 0.5s;
}
.list-enter,
.list-leave-to {
opacity: 0;
transform: translateY(20px);
}
</style>
<script>
export default {
data() {
return {
items: [
{ id: 1, text: 'Item 1' },
{ id: 2, text: 'Item 2' },
{ id: 3, text: 'Item 3' }
]
};
},
methods: {
addItem() {
const newItem = {
id: Date.now(),
text: 'New Item'
};
this.items.push(newItem);
}
}
};
</script>動態(tài)過渡和動畫:
Vue支持根據(jù)動態(tài)數(shù)據(jù)來觸發(fā)過渡和動畫效果??梢允褂脛討B(tài)綁定來根據(jù)數(shù)據(jù)的變化來觸發(fā)過渡和動畫效果。適用于根據(jù)動態(tài)數(shù)據(jù)觸發(fā)過渡和動畫效果的場景.
<template>
<transition :name="transitionName">
<p v-if="show">This is a dynamic transition element.</p>
</transition>
<button @click="toggleShow">Toggle Show</button>
</template>
<script>
export default {
data() {
return {
show: false,
transitionName: ''
};
},
methods: {
toggleShow() {
this.show = !this.show;
this.transitionName = this.show ? 'fade' : 'slide';
}
}
};
</script>自定義過渡和動畫
Vue允許自定義過渡和動畫效果,以滿足特定的需求??梢允褂?code><transition>和<transition-group>組件的屬性和事件來自定義過渡和動畫效果。適用于需要自定義過渡和動畫效果的場景,通過自定義CSS樣式和JavaScript鉤子函數(shù)來實現(xiàn)特定的過渡和動畫效果。
<template>
<transition
name="custom-transition"
@before-enter="beforeEnter"
@enter="enter"
@after-enter="afterEnter"
@before-leave="beforeLeave"
@leave="leave"
@after-leave="afterLeave"
>
<p v-if="show">This is a custom transition element.</p>
</transition>
<button @click="toggleShow">Toggle Show</button>
</template>
<style>
.custom-transition-enter-active,
.custom-transition-leave-active {
transition: opacity 0.5s, transform 0.5s;
}
.custom-transition-enter,
.custom-transition-leave-to {
opacity: 0;
transform: translateY(20px);
}
</style>
<script>
export default {
data() {
return {
show: false
};
},
methods: {
beforeEnter(el) {
el.style.opacity = 0;
el.style.transform = 'translateY(20px)';
},
enter(el, done) {
setTimeout(() => {
el.style.opacity = 1;
el.style.transform = 'translateY(0)';
done();
}, 1000);
},
afterEnter(el) {
// 執(zhí)行進(jìn)入后的操作
},
beforeLeave(el) {
// 執(zhí)行離開前的操作
},
leave(el, done) {
setTimeout(() => {
el.style.opacity = 0;
el.style.transform = 'translateY(20px)';
done();
}, 1000);
},
afterLeave(el) {
// 執(zhí)行離開后的操作
},
toggleShow() {
this.show = !this.show;
}
}
};
</script>這些示例涵蓋了不同的過渡和動畫應(yīng)用場景,可以根據(jù)具體的需求和場景選擇適合的示例。
以上就是一文搞懂Vue里的過渡和動畫的詳細(xì)內(nèi)容,更多關(guān)于Vue 過渡和動畫的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue 點擊按鈕實現(xiàn)動態(tài)掛載子組件的方法
今天小編就為大家分享一篇vue 點擊按鈕實現(xiàn)動態(tài)掛載子組件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09
Vuex state中同步數(shù)據(jù)和異步數(shù)據(jù)方式
這篇文章主要介紹了Vuex state中同步數(shù)據(jù)和異步數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
Vue3+Vite項目使用mockjs隨機(jī)模擬數(shù)據(jù)
這篇文章主要介紹了Vue3+Vite項目使用mockjs隨機(jī)模擬數(shù)據(jù),需要的朋友可以參考下2023-01-01
詳解Vue中$props、$attrs和$listeners的使用方法
本文主要介紹了Vue中$props、$attrs和$listeners的使用詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12

