你的理解是一個過渡將在另一個之前開始完成是錯誤的。如果你是一個transition
標籤中變幻出一個元素,它可能是真實的,但是當每個元素被包裹在自己的transition
標籤是不正確的。
您可以做的最簡單的事情是使用setTimeout
來分配下一個activeSlide
等待轉換。
methods: {
prevSlide() {
const nextSlide = this.activeSlide === this.firstSlide ? this.lastSlide : this.activeSlide - 1;
this.activeSlide = null;
setTimeout(() => {
this.activeSlide = nextSlide;
}, 500);
},
nextSlide() {
const nextSlide = this.activeSlide === this.lastSlide ? this.firstSlide : this.activeSlide + 1;
this.activeSlide = null;
setTimeout(() => {
this.activeSlide = nextSlide;
}, 500);
}
}
這要求您的超時值和CSS過渡時間保持同步。
有點更多的工作是使用transition hooks當離開過渡開始和結束髮射活動。
<transition name="fade" mode="out-in" @leave="transitionStarted" @after-leave="transitionComplete">
你會趕上他們在頂級代碼,(不是滑塊,因爲片事件不會傳播到插槽容器)
<slide src="http://lorempixel.com/196/196" alt="" @transition-started="holdUp" @transition-complete="okGo"></slide>
在處理程序(holdUp
和okGo
)你可以設置一個布爾數據項,你可以將它作爲道具傳給slider
。在slider
,nextSlide
和prevSlide
將計算activeSlide
下一個值是什麼,但不會設置。當道具指示過渡完成時它會被設置。