vue.js之過渡效果-css


概述

vuejs的過渡效果可以讓我們的頁面元素在出現和消失時實現過渡。官方文檔這樣描述過渡效果的方式:

在 CSS 過渡和動畫中自動應用 class
可以配合使用第三方 CSS 動畫庫,如 Animate.css
在過渡鈎子函數中使用 JavaScript 直接操作 DOM
可以配合使用第三方 JavaScript 動畫庫,如 Velocity.js

 

簡單而言就是,你可以使用vue的<transition></transition>組件,結合css的動畫(animation),過渡(transition),或者javascript操作dom來讓你的元素或者組件動起來。

而在引用css和javascript中,你可以自己寫,也可以利用現成的css或者javascript的第三方庫。

css過渡/動畫

css過渡就是僅使用transition完成的效果。大概的結構長這個樣子:

//html
<transition name="xxx">
    <p v-if="show">hello</p>//這里是你要過渡的元素或者組件,包裹在transition標簽里
  </transition>
//css
.xxx-enter-active {
  transition: all .3s ease;
}
.xxx-leave-active {
  transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
}
.xxx-fade-enter,.xxx-leave-active {
  transform: translateX(10px);
  opacity: 0;
}

這里出現了一個叫xxx的同學,這就是給過渡組件起的名字,這樣,vue就會到css中去找前綴名為xxx的類。並應用在組件里面的元素上面。

這四個css類的后綴名各不相同,分別是

enter,leave,enter-active,和leave-active,

這四個后綴分別代表:

進入過渡開始,離開過渡開始,進入過渡開始到進入過渡結束,離開過渡開始到離開過渡結束。

css過渡說白了就是動態加上和去掉相應的class實現的。比如說下面這個小方塊(圖片來自vue官網),進入開始時,透明度是0(加上了 .xxx-fade-enter class造成的opacity=0

),中間過程又加上了(.xxx-enter-active)。進入結束時,過渡效果完成,透明度是1,vue把上面加的class都去掉。離開開始時,透明度是1,中間過程加上(xxx-enter-active class)此時元素的css樣式如下:

transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
opacity:0;
tansfrom:translateX(10px) 

離開結束時,透明度是0,此時v-if也在起作用,最終是元素從dom中消失,有興趣的話可以F12看官網的demo,就能豁然開朗了。

 

css動畫

css動畫就要用到css3的animation了,對於自己寫的動畫,用法與上面的過渡基本相同:

<div id="demo">
  <button @click="show = !show">
    Toggle {{show}}
  </button>
  <transition name="boom">
    <p v-if="show" id='circle'></p>
  </transition>
</div>

//css
.boom-enter-active{//boom 是過渡名稱 in,out是兩個動畫,動畫寫到進入和離開結束的class中
animation:in .5s;
}
.boom-leave-active{
animation:out .5s;
}
@keyframes  in {//in動畫
0% {
    transform: scale(2);
  opactity:0;
  }
  50% {
    transform: scale(1.5);
opactity:0.5;
  }
  100% {
    transform: scale(1);
opactity:1;
  }
}
@keyframes  out {//out 動畫
0% {
    transform: scale(1);
  }
  100% {
    transform: scale(2);
opactity:0;
  }
}


//js
new Vue({
  el: '#demo',
  data: {
    show: true
  }
})

 其實日常使用中還是使用css庫更方便。這時要用到

  • enter-class
  • enter-active-class
  • leave-class
  • leave-active-class

四個自定義屬性,這里說是屬性,是因為,這些不是寫在css中,而是寫在<transition>標簽中的屬性.使用animate.css庫,就在enter-active-classleave-active-class屬性名下填入對應的動畫名即可,animated是必須填的。

<transition
    enter-active-class="animated rollIn"//屬性名=屬性值
    leave-active-class="animated rollOut"
  >
    <p v-if="show">hello</p>
  </transition>

 trainsition mode

transition mode有兩種模式

  • in-out:新元素先進行過渡,完成之后當前元素過渡離開。

  • out-in:當前元素先進行過渡,完成之后新元素過渡進入。

使用mode時,要注意給trainsiton下面的元素綁定key,否則可能看不到過渡效果

借助過渡模式,我們可以寫一個消息滾動條。效果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM