搜尋

首頁  >  問答  >  主體

javascript - vue過渡效果 css過渡 類別名稱的先後順序

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

.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

黄舟黄舟2852 天前732

全部回覆(4)我來回復

  • 仅有的幸福

    仅有的幸福2017-06-26 10:57:15

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

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

    回覆
    0
  • 阿神

    阿神2017-06-26 10:57:15

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

    回覆
    0
  • 天蓬老师

    天蓬老师2017-06-26 10:57:15

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

    回覆
    0
  • 滿天的星座

    滿天的星座2017-06-26 10:57:15

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

    回覆
    0
  • 取消回覆