在做一個仿餓了麼外賣頁面效果時,有一個詳情頁面顯示隐藏的過渡效果。
在折騰了半天後終于發現,他那個效果是用vue1.0寫的,在我這2.5版本的vue面前完全不頂用。找到問題就好辦了,趕緊上官網搬了一段救兵回來。
在需要過渡效果的元素外面套一層:
<transition name='fade'></transition>
然後添加樣式:
.fade-enter-active, .fade-leave-active {
transition: opacity .5s;
}
.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
opacity: 0;
}
很簡單嘛,效果立竿見…… 诶,不對,“影子”呢?怎麼感覺顯示和消失的速率不一樣啊,為了更明顯的感覺,我把時間改成了3s,這下立馬露餡兒了。
顯示的時候立刻就出現了,消失時确實是按照了3s的設定緩慢消失。
逗我玩兒呐!把官方文檔掀的底朝天了都沒看出毛來,又搜了一堆的部落格,也沒有頭緒。這眼看着就1點半了,困意來襲,咋辦明天繼續麼?
在我又一次把所有代碼拆成單個樣式後,不知道哪根筋抽了下,會不會是顯示控制的問題?仔細對比了官方源碼:
<div id="example-1">
<button @click="show = !show">
Toggle render
</button>
<transition name="slide-fade">
<p v-if="show">hello</p>
</transition>
</div>
!!! v-if! v-if! v-if! 娘的,說好的不是可以用v-show來顯示隐藏的麼,為啥效果還不一樣?
又去撸了一邊條件渲染:
v-if 指令用于條件性地渲染一塊内容。這塊内容隻會在指令的表達式傳回 truthy 值的時候被渲染。
v-show與v-if不同, v-show的元素始終會被渲染并保留在 DOM 中,隻是簡單地切換元素的 CSS 屬性 display。
這下清楚了,當顯示的時候,v-show直接切換了元素的CSS 屬性 display。具體原理說不上來,但是就是這個原因,導緻他沒有按照設定的過渡效果進行展示。
自己挖的坑,還得自己填上!