TransitionGroup
<TransitionGroup>
è un componente integrato progettato per animare l'inserimento, la rimozione e la modifica dell'ordine degli elementi, o dei componenti, renderizzati in un elenco.
Differenze rispetto a <Transition>
<TransitionGroup>
supporta le stesse proprietà, classi di transizione CSS e hook JavaScript di <Transition>
, con le seguenti differenze:
Di default, non renderizza un elemento wrapper. Ma puoi specificare un elemento da renderizzare con la prop
tag
.Le Modalità di Transizione non sono disponibili, dato che non stiamo più alternando elementi mutualmente esclusivi.
Gli elementi racchiusi al loro interno devono sempre avere un attributo
key
unico.Le classi di transizione CSS verranno applicate ai singoli elementi nell'elenco, non al loro gruppo / contenitore.
TIP
Quando utilizzato nei template DOM, dovrebbe essere referenziato come <transition-group>
.
Transizioni di Ingresso / Uscita
Ecco un esempio di applicazione delle transizioni di ingresso / uscita a un elenco v-for
utilizzando <TransitionGroup>
:
template
<TransitionGroup name="list" tag="ul">
<li v-for="item in items" :key="item">
{{ item }}
</li>
</TransitionGroup>
css
.list-enter-active,
.list-leave-active {
transition: all 0.5s ease;
}
.list-enter-from,
.list-leave-to {
opacity: 0;
transform: translateX(30px);
}
- 1
- 2
- 3
- 4
- 5
Transizioni di Spostamento
La demo sopra ha alcuni difetti evidenti: quando un elemento viene inserito o rimosso, gli elementi circostanti "saltano" istantaneamente al loro posto invece di muoversi in modo fluido. Possiamo correggere questo comportamento tramite alcune regole CSS aggiuntive:
css
.list-move, /* applica la transizione agli elementi in movimento */
.list-enter-active,
.list-leave-active {
transition: all 0.5s ease;
}
.list-enter-from,
.list-leave-to {
opacity: 0;
transform: translateX(30px);
}
/* assicurati che gli elementi in uscita siano esclusi dal flusso del layout in modo
che le animazioni in movimento possano essere calcolate correttamente. */
.list-leave-active {
position: absolute;
}
Ora sembra molto meglio, con un'animazione fluida anche quando l'intera lista viene rimescolata:
- 1
- 2
- 3
- 4
- 5
Transizioni Sfalsate degli Elementi in un Elenco
Comunicando con le transizioni JavaScript tramite i data attribute, è possibile anche sfalsare le transizioni in un elenco. Per prima cosa, visualizziamo l'indice di un elemento in un data attribute sull'elemento DOM:
template
<TransitionGroup
tag="ul"
:css="false"
@before-enter="onBeforeEnter"
@enter="onEnter"
@leave="onLeave"
>
<li
v-for="(item, index) in computedList"
:key="item.msg"
:data-index="index"
>
{{ item.msg }}
</li>
</TransitionGroup>
Poi, negli hook JavaScript, animiamo l'elemento con un ritardo basato sull'attributo dei dati. Questo esempio utilizza la libreria GreenSock per eseguire l'animazione:
js
function onEnter(el, done) {
gsap.to(el, {
opacity: 1,
height: '1.6em',
delay: el.dataset.index * 0.15,
onComplete: done
})
}
- Bruce Lee
- Jackie Chan
- Chuck Norris
- Jet Li
- Kung Fury
Correlati