欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue過(guò)渡效果之CSS過(guò)渡詳解(結(jié)合transition,animation,animate.css)

 更新時(shí)間:2020年02月05日 16:53:58   作者:小火柴的藍(lán)色理想  
Vue 在插入、更新或者移除 DOM 時(shí),提供多種不同方式的應(yīng)用過(guò)渡效果。本文將從CSS過(guò)渡transition、CSS動(dòng)畫(huà)animation及配合使用第三方CSS動(dòng)畫(huà)庫(kù)(如animate.css)這三方面來(lái)詳細(xì)介紹Vue過(guò)渡效果之CSS過(guò)渡

以一個(gè)toggle按鈕控制p元素顯隱為例,如果不使用過(guò)渡效果,則如下所示

<div id="demo">
 <button v-on:click="show = !show">Toggle</button>
 <p v-if="show">藍(lán)色理想</p>
</div>
<script>
new Vue({
 el: '#demo',
 data: {
  show: true
 }
})
</script>

如果要為此加入過(guò)渡效果,則需要使用過(guò)渡組件transition 

過(guò)渡組件

Vue提供了transition的封裝組件,下面代碼中,該過(guò)渡組件的名稱(chēng)為'fade'

 <transition name="fade">
  <p v-if="show">藍(lán)色理想</p>
 </transition>

當(dāng)插入或刪除包含在transition組件中的元素時(shí),Vue會(huì)自動(dòng)嗅探目標(biāo)元素是否應(yīng)用了 CSS 過(guò)渡或動(dòng)畫(huà),如果是,在恰當(dāng)?shù)臅r(shí)機(jī)添加/刪除 CSS 類(lèi)名 

過(guò)渡類(lèi)名

總共有6個(gè)(CSS)類(lèi)名在enter/leave的過(guò)渡中切換

v-enter

定義進(jìn)入過(guò)渡的開(kāi)始狀態(tài)。在元素被插入時(shí)生效,在下一個(gè)幀移除

v-enter-active

定義過(guò)渡的狀態(tài)。在元素整個(gè)過(guò)渡過(guò)程中作用,在元素被插入時(shí)生效,在 transition 或 animation 完成之后移除。 這個(gè)類(lèi)可以被用來(lái)定義過(guò)渡的過(guò)程時(shí)間,延遲和曲線(xiàn)函數(shù)

v-enter-to

定義進(jìn)入過(guò)渡的結(jié)束狀態(tài)。在元素被插入一幀后生效(與此同時(shí) v-enter 被刪除),在  transition 或 animation 完成之后移除

v-leave

定義離開(kāi)過(guò)渡的開(kāi)始狀態(tài)。在離開(kāi)過(guò)渡被觸發(fā)時(shí)生效,在下一個(gè)幀移除

v-leave-active

定義過(guò)渡的狀態(tài)。在元素整個(gè)過(guò)渡過(guò)程中作用,在離開(kāi)過(guò)渡被觸發(fā)后立即生效,在 transition 或 animation 完成之后移除。 這個(gè)類(lèi)可以被用來(lái)定義過(guò)渡的過(guò)程時(shí)間,延遲和曲線(xiàn)函數(shù)

v-leave-to

定義離開(kāi)過(guò)渡的結(jié)束狀態(tài)。在離開(kāi)過(guò)渡被觸發(fā)一幀后生效(與此同時(shí) v-leave 被刪除),在 transition 或 animation 完成之后移除

對(duì)于這些在 enter/leave 過(guò)渡中切換的類(lèi)名,v- 是這些類(lèi)名的前綴,表示過(guò)渡組件的名稱(chēng)。比如,如果使用 <transition name="my-transition"> ,則 v-enter替換為 my-transition-enter

transition

常用的Vue過(guò)渡效果都是使用CSS過(guò)渡transition,下面增加一個(gè)enter時(shí)透明度變化,leave時(shí)位移變化的效果

<style>
.fade-enter{
 opacity:0;
}
.fade-enter-active{
 transition:opacity .5s;
}
.fade-leave-active{
 transition:transform .5s;
}
.fade-leave-to{
 transform:translateX(10px);
}
</style>
<div id="demo">
 <button v-on:click="show = !show">Toggle</button>  
 <transition name="fade">
  <p v-if="show">藍(lán)色理想</p>
 </transition>
</div>
<script>
new Vue({
 el: '#demo',
 data: {
  show: true
 }
})
</script>

animation

CSS動(dòng)畫(huà)animation用法同CSS過(guò)渡transition,區(qū)別是在動(dòng)畫(huà)中 v-enter 類(lèi)名在節(jié)點(diǎn)插入 DOM 后不會(huì)立即刪除,而是在 animationend 事件觸發(fā)時(shí)刪除

下面例子中,在元素enter和leave時(shí)都增加縮放scale效果

<style>
.bounce-enter-active{
 animation:bounce-in .5s;
}
.bounce-leave-active{
 animation:bounce-in .5s reverse;
}
@keyframes bounce-in{
 0%{transform:scale(0);}
 50%{transform:scale(1.5);}
 100%{transform:scale(1);}
}
</style>
<div id="demo">
 <button v-on:click="show = !show">Toggle</button>  
 <transition name="bounce">
  <p v-if="show">藍(lán)色理想</p>
 </transition>
</div>
<script>
new Vue({
 el: '#demo',
 data: {
  show: true
 }
})
</script>

同時(shí)使用

Vue 為了知道過(guò)渡的完成,必須設(shè)置相應(yīng)的事件監(jiān)聽(tīng)器。它可以是 transitionend 或 animationend ,這取決于給元素應(yīng)用的 CSS 規(guī)則。如果使用其中任何一種,Vue 能自動(dòng)識(shí)別類(lèi)型并設(shè)置監(jiān)聽(tīng)。

但是,在一些場(chǎng)景中,需要給同一個(gè)元素同時(shí)設(shè)置兩種過(guò)渡動(dòng)效,比如 animation 很快的被觸發(fā)并完成了,而 transition 效果還沒(méi)結(jié)束。在這種情況中,就需要使用 type 特性并設(shè)置 animation 或 transition 來(lái)明確聲明需要 Vue 監(jiān)聽(tīng)的類(lèi)型

<style>
.fade-enter,.fade-leave-to{
 opacity:0;
}
.fade-enter-active,.fade-leave-active{
 transition:opacity 1s;
 animation:bounce-in 5s;
}
@keyframes bounce-in{
 0%{transform:scale(0);}
 50%{transform:scale(1.5);}
 100%{transform:scale(1);}
}
</style>
<div id="demo">
 <button v-on:click="show = !show">Toggle</button>  
 <transition name="fade" type="transition">
  <p v-if="show">藍(lán)色理想</p>
 </transition>
</div>
<script>
new Vue({
 el: '#demo',
 data: {
  show: true,
 },
})
</script>

自定義類(lèi)名

可以通過(guò)以下特性來(lái)自定義過(guò)渡類(lèi)名

enter-class

enter-active-class

enter-to-class 

leave-class

leave-active-class

leave-to-class 

自定義類(lèi)名的優(yōu)先級(jí)高于普通的類(lèi)名,這對(duì)于Vue的過(guò)渡系統(tǒng)和其他第三方CSS動(dòng)畫(huà)庫(kù),如 Animate.css 結(jié)合使用十分有用

<link rel="stylesheet"  rel="external nofollow" >
<div id="example">
 <button @click="show = !show">
  Toggle render
 </button>
 <transition name="xxx" enter-active-class="animated tada" leave-active-class="animated bounceOutRight">
  <p v-if="show">藍(lán)色理想</p>
 </transition>
</div>
<script src="https://www.jb51.com/vue"></script>
<script>
new Vue({
 el: '#example',
 data: {
  show: true
 }
})
</script>

初始渲染過(guò)渡

可以通過(guò) appear 特性設(shè)置節(jié)點(diǎn)的在初始渲染的過(guò)渡

<transition appear>
 <!-- ... -->
</transition>

這里默認(rèn)和進(jìn)入和離開(kāi)過(guò)渡一樣,同樣也可以自定義 CSS 類(lèi)名

<transition
 appear
 appear-class="custom-appear-class"
 appear-to-class="custom-appear-to-class" 
 appear-active-class="custom-appear-active-class"
>
 <!-- ... -->
</transition>

下面是一個(gè)例子

<style>
.custom-appear-class{
 opacity:0;
 background-color:pink;
 transform:translateX(100px);
} 
.custom-appear-active-class{
 transition: 2s;
}
</style>
<div id="demo">
 <button @click="reset">還原</button>
 <transition appear  appear-class="custom-appear-class"
 appear-to-class="custom-appear-to-class" 
 appear-active-class="custom-appear-active-class">
  <p>藍(lán)色理想</p>
 </transition>
</div>
<script>
new Vue({
 el: '#demo',
 methods:{
  reset(){
   history.go();
  }
 }
})
</script>

過(guò)渡時(shí)間

在很多情況下,Vue可以自動(dòng)得出過(guò)渡效果的完成時(shí)機(jī)。默認(rèn)情況下,Vue會(huì)等待其在過(guò)渡效果的根元素的第一個(gè) transitionend 或 animationend 事件。然而也可以不這樣設(shè)定——比如,可以擁有一個(gè)精心編排的一序列過(guò)渡效果,其中一些嵌套的內(nèi)部元素相比于過(guò)渡效果的根元素有延遲的或更長(zhǎng)的過(guò)渡效果

在這種情況下可以用<transition>組件上的duration屬性定制一個(gè)顯性的過(guò)渡效果持續(xù)時(shí)間 (以毫秒計(jì))

下面的代碼意味著元素在進(jìn)入enter和離開(kāi)leave時(shí),持續(xù)時(shí)間都為1s,而無(wú)論在樣式中它們的設(shè)置值為多少

<transition :duration="1000">...</transition>

也可以分別定制進(jìn)入和移出的持續(xù)時(shí)間

<transition :duration="{ enter: 500, leave: 800 }">...</transition>

比如,下面的代碼中,進(jìn)入和移出的效果都為animate.css里面的shake效果,但持續(xù)時(shí)間分別是0.5s和1s

<div id="demo">
 <button v-on:click="show = !show">Toggle</button>  
 <transition :duration="{ enter: 500, leave: 1000 }" name="xxx" enter-active-class="animated shake" leave-active-class="animated shake">
  <p v-if="show">小火柴的藍(lán)色理想</p>
 </transition>
</div>
<script>
new Vue({
 el: '#demo',
 data: {
  show: true
 }
})
</script>

過(guò)渡條件

一般地,在Vue中滿(mǎn)足下列任意一個(gè)過(guò)渡條件,即可添加過(guò)渡效果

條件渲染(使用v-if)

常見(jiàn)的條件是使用條件渲染,使用v-if

<style>
.fade-enter,.fade-leave-to{
 opacity:0;
}
.fade-enter-active,.fade-leave-active{
 transition:opacity 1s;
}
</style>
<div id="demo">
 <button v-on:click="show = !show">Toggle</button>  
 <transition name="fade">
  <p v-if="show">藍(lán)色理想</p>
 </transition>
</div>
<script>
new Vue({
 el: '#demo',
 data: {
  show: true
 }
})
</script>

條件展示(使用v-show)

使用條件展示,即使用v-show時(shí),也可以添加過(guò)渡效果

<div id="demo">
 <button v-on:click="show = !show">Toggle</button>  
 <transition name="fade">
  <p v-show="show">藍(lán)色理想</p>
 </transition>
</div>

動(dòng)態(tài)組件

使用is屬性實(shí)現(xiàn)的動(dòng)態(tài)組件,可以添加過(guò)渡效果

<div id="demo">
 <button v-on:click="show = !show">Toggle</button>  
 <transition name="fade">
  <component :is="view"></component>
 </transition>
</div>
<script>
new Vue({
 el: '#demo',
 components:{
  'home':{template:'<div>藍(lán)色理想</div>'}
 },
 data: {
  show: true,
 },
 computed:{
  view(){
   return this.show ? 'home' : '';
  }
 }
})

更多關(guān)于Vue動(dòng)畫(huà)效果的文章請(qǐng)點(diǎn)擊下面的相關(guān)鏈接

相關(guān)文章

  • vue.js動(dòng)態(tài)組件和插槽的使用匯總

    vue.js動(dòng)態(tài)組件和插槽的使用匯總

    這篇文章主要介紹了vue.js動(dòng)態(tài)組件和插槽的使用匯總,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • Vue解決移動(dòng)端彈窗滾動(dòng)穿透問(wèn)題

    Vue解決移動(dòng)端彈窗滾動(dòng)穿透問(wèn)題

    這篇文章主要介紹了Vue解決移動(dòng)端彈窗滾動(dòng)穿透問(wèn)題的方法,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2020-12-12
  • 一文帶你從零開(kāi)始搭建vue3項(xiàng)目

    一文帶你從零開(kāi)始搭建vue3項(xiàng)目

    使用VUE3開(kāi)發(fā)很久了,但一直沒(méi)進(jìn)行總結(jié)和記錄,下面這篇文章主要給大家介紹了關(guān)于從零開(kāi)始搭建vue3項(xiàng)目的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • vue登錄頁(yè)實(shí)現(xiàn)使用cookie記住7天密碼功能的方法

    vue登錄頁(yè)實(shí)現(xiàn)使用cookie記住7天密碼功能的方法

    這篇文章主要介紹了vue登錄頁(yè)實(shí)現(xiàn)使用cookie記住7天密碼功能的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Vue input輸入框中的值如何變成黑點(diǎn)問(wèn)題

    Vue input輸入框中的值如何變成黑點(diǎn)問(wèn)題

    這篇文章主要介紹了Vue input輸入框中的值如何變成黑點(diǎn)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Vue3中實(shí)現(xiàn)選取頭像并裁剪

    Vue3中實(shí)現(xiàn)選取頭像并裁剪

    這篇文章主要詳細(xì)介紹了在vue3中如何選取頭像并裁剪,文章中有詳細(xì)的代碼示例,需要的朋友可以參考閱讀
    2023-04-04
  • Vue3中Provide?/?Inject的實(shí)現(xiàn)原理分享

    Vue3中Provide?/?Inject的實(shí)現(xiàn)原理分享

    provide和inject主要為高階插件/組件庫(kù)提供用例,這篇文章主要給大家介紹了關(guān)于Vue3中Provide?/?Inject的實(shí)現(xiàn)原理,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • 解決element?ui?cascader?動(dòng)態(tài)加載回顯問(wèn)題

    解決element?ui?cascader?動(dòng)態(tài)加載回顯問(wèn)題

    這篇文章主要介紹了element?ui?cascader?動(dòng)態(tài)加載回顯問(wèn)題解決方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • 在Vue中使用防抖與節(jié)流,及this指向的問(wèn)題

    在Vue中使用防抖與節(jié)流,及this指向的問(wèn)題

    這篇文章主要介紹了在Vue中使用防抖與節(jié)流,及this指向的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • vue2使用element-ui,el-table不顯示,用npm安裝方式

    vue2使用element-ui,el-table不顯示,用npm安裝方式

    這篇文章主要介紹了vue2使用element-ui,el-table不顯示,用npm安裝方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評(píng)論