javascript - vue過渡效果 css過渡 類別名稱的先後順序
黄舟
黄舟 2017-06-26 10:55:15
0
4
682

給一個元素設計過渡,理想效果是出現時高度遞增,消失是高度遞減。
設計的程式碼如下:

.collapse-enter-active, 
.collapse-leave-active {
  transition: height .5s;
}
.collapse-enter, 
.collapse-leave-active {
  height: 0;
}
.collapse-leave {
  height: 100px;
} 
.collapse-enter-active {
  height: 100px;
}

結果元素出現時,高度直接到達100px,消失時正常,修改程式碼的順序如下:

.collapse-enter-active, 
.collapse-leave-active {
  transition: height .5s;
}
.collapse-enter-active {
  height: 100px;
}
.collapse-enter, 
.collapse-leave-active {
  height: 0;
}
.collapse-leave {
  height: 100px;
}

問題解決了,不明白順序為什麼會造成影響,過渡效果不是在透過切換css來實現的麼,應該不是覆蓋的問題吧?
具體效果可以點選查看 jsbin

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回覆(4)
仅有的幸福

@CRIMX 的答案已經講清楚了,本質上就是enter 和enter active 兩個類別會在第一幀同時存在於動畫元素上,而後透過移除enter 類別執行動畫,因此不能讓active 類別的樣式提前生效。

兩個類別的方式雖然足以完成動畫,但確實不太容易理解,所以vue 2.1.8 開始增加了to 的類名,可以將動畫的結束態從active 類中剝離出來,更方便理解,避免產生順序覆蓋問題。

阿神

在元素被插入時 v-enter 和 v-enter-active 同時生效的,前者在下一幀移除,後者在動畫完成後移除。所以 v-enter-active 要寫在前面。 leave 也是一樣。

Peter_Zhu

這個真是挺奇怪的, 下次寫把active寫前面, 坐等高人來解惑

滿天的星座

你可以看一下官網給的解釋,說的很詳細:https://cn.vuejs.org/v2/guide/transitions.html#過渡的-CSS-類名

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板