Siirry pääsisältöön

View Transitions

Avaa ChatGPT:ssä
Java API
25.11 Koe-aloite

Näkymäsiirtymät tarjoavat animaatioita, kun DOM muuttuu, vähentäen visuaalista häiritsevät hetkiä ja ylläpitäen tilallista kontekstia navigoinnin tai sisällön päivitysten aikana. webforJ integroituu selaimen View Transition API:in käsitelläkseen animaatioiden koordinoimisen vanhojen ja uusien tilojen välillä.

Näytä koodi

Experimental feature
This feature is experimental and may change or be removed in a future release.

Käytä Page.getCurrent().startViewTransition() luodaksesi siirtymän, joka palauttaa rakenteen siirtymän konfiguroimiseksi:

Page.getCurrent().startViewTransition()
.onUpdate(done -> {
container.remove(oldView);
container.add(newView);
done.run();
})
.start();

Siirtymäprosessi tallentaa nykytilanteen, soveltaa DOM-muutoksesi onUpdate palautteessa ja sitten animoidaan vanhasta näkymästä uuteen sisältöön. Sinun on kutsuttava done.run() signaloidaksesi, kun muutoksesi ovat valmiit.

onUpdate palautteen asettaminen on pakollista

Kutsuminen start() ilman päivityspalautetta heittää IllegalStateException.

Siirtymien soveltaminen​

webforJ tarjoaa ennalta määriteltyjä siirtymätyyppejä, joita voit soveltaa komponentteihin, jotka tulevat tai poistuvat DOM:sta:

VakioVaikutus
ViewTransition.NONEEi animaatiota
ViewTransition.FADERistiinliuku vanhan ja uuden sisällön välillä
ViewTransition.SLIDE_LEFTSisältö virtaa vasemmalle (kuten eteenpäin navigointi)
ViewTransition.SLIDE_RIGHTSisältö virtaa oikealle (kuten taaksepäin navigointi)
ViewTransition.SLIDE_UPSisältö virtaa ylöspäin
ViewTransition.SLIDE_DOWNSisältö virtaa alaspäin
ViewTransition.ZOOMVanha sisältö pienenee, uusi sisältö kasvaa
ViewTransition.ZOOM_OUTVanha sisältö kasvaa pois, uusi sisältö pienenee

Käytä enter() animaatiossa komponentin lisäämiseen ja exit() animaatiossa komponentin poistamiseen:

// Animoidaan komponenttia, joka tulee DOM:iin
Page.getCurrent().startViewTransition()
.enter(chatPanel, ViewTransition.ZOOM)
.onUpdate(done -> {
container.add(chatPanel);
done.run();
})
.start();

// Animoidaan komponenttia, joka poistuu DOM:ista
Page.getCurrent().startViewTransition()
.exit(chatPanel, ViewTransition.FADE)
.onUpdate(done -> {
container.remove(chatPanel);
done.run();
})
.start();

Jaetut komponenttisiirtymät​

Jaetut komponenttisiirtymät luovat muuntamistehosteen, jossa komponentti tuntuu siirtyvän paikastaan vanhassa näkymässä uuteen näkymään. Tämä saavutetaan antamalla komponentille sama siirtymän nimi käyttämällä setViewTransitionName()-menetelmää, joka on saatavilla kaikilla komponenteilla, jotka toteuttavat HasStyle -rajapinnan.

// Korttinäkymässä
image.setViewTransitionName("blog-image");

// Yksityiskohtanäkymässä - sama nimi luo muunnoksen
image.setViewTransitionName("blog-image");

Kun siirrytään näiden näkymien välillä, selain animoi komponenttia paikkojen välillä, luoden yhteyden visuaalisen kokemuksen.

Käytä ainutlaatuisia nimiä

Työskennellessäsi luetteloiden tai toistuvien komponenttien kanssa, sisällytä ainutlaatuinen tunniste siirtymän nimeen. Jokainen komponentti tarvitsee oman erillisen nimen muuntuaakseen oikein vastaavaan komponenttiin uudessa näkymässä. Saman nimen käyttäminen useille näkyville komponenteille aiheuttaa määrittelemätöntä käyttäytymistä.

Näytä koodi

Luetteloiden uudelleenjärjestely​

Yksi yleinen käyttötapa jaetuissa komponenttisiirtymissä on luetteloelementtien animointi, kun niiden järjestys muuttuu. Antamalla jokaiselle tuotteelle ainutlaatuinen view-transition-name, selain animoi automaattisesti komponentit uusiin sijainteihinsa:

// Jokaiselle kortille annetaan ainutlaatuinen siirtymän nimi sen ID:n perusteella
card.setViewTransitionName("card-" + item.id());

// Sekoituksessa päivitä vain DOM - selain käsittelee animaation
Page.getCurrent().startViewTransition()
.onUpdate(done -> {
renderList();
done.run();
})
.start();
Näytä koodi

Mukautetut CSS-animaatiot​

Täydelliseen ohjaukseen animaatioissa voit määrittää mukautettuja CSS-käyräkohtia. webforJ lisää -enter tai -exit -liitteet siirtymän nimiin, joita käytät kohdistamaan näkymäsiirtymän pseudo-elementit:

/* Määrittele avainkehykset tuleville komponenteille */
@keyframes flip-enter {
from {
opacity: 0;
transform: perspective(1000px) rotateX(-90deg);
}
to {
opacity: 1;
transform: perspective(1000px) rotateX(0deg);
}
}

/* Soveltaa näkymäsiirtymän pseudo-elementtiin */
::view-transition-new(flip-in-enter) {
animation: flip-enter 450ms cubic-bezier(0.34, 1.56, 0.64, 1);
transform-origin: top center;
}

::view-transition-old(flip-in-enter) {
display: none;
}

Viittaa mukautettuun animaatioosi antamalla sen nimi (ilman liitettä) enter() tai exit()-menetelmille:

// Käytä "flip-in" - webforJ lisää "-enter" liitteen automaattisesti
Page.getCurrent().startViewTransition()
.enter(notification, "flip-in")
.onUpdate(done -> {
stage.add(notification);
done.run();
})
.start();

// Käytä "blur-out" poistettaessa - webforJ lisää "-exit" liitteen
Page.getCurrent().startViewTransition()
.exit(notification, "blur-out")
.onUpdate(done -> {
stage.remove(notification);
done.run();
})
.start();
Näytä koodi

CSS-kustomointi​

Jokainen ennalta määritelty siirtymätyyppi tarjoaa CSS-mukautusominaisuuksia hienosäätöön:

MuuttujaOletusKuvaus
--vt-fade-duration200msAnimaation kesto
--vt-fade-easingcubic-bezier(0.4, 0, 0.2, 1)Tasoitusfunktio
MuuttujaOletusKuvaus
--vt-slide-left-duration200msAnimaation kesto
--vt-slide-left-easingcubic-bezier(0.4, 0, 0.2, 1)Tasoitusfunktio
--vt-slide-left-distance30%Liukumatka
MuuttujaOletusKuvaus
--vt-slide-right-duration200msAnimaation kesto
--vt-slide-right-easingcubic-bezier(0.4, 0, 0.2, 1)Tasoitusfunktio
--vt-slide-right-distance30%Liukumatka
MuuttujaOletusKuvaus
--vt-slide-up-duration200msAnimaation kesto
--vt-slide-up-easingcubic-bezier(0.4, 0, 0.2, 1)Tasoitusfunktio
--vt-slide-up-distance30%Liukumatka
MuuttujaOletusKuvaus
--vt-slide-down-duration200msAnimaation kesto
--vt-slide-down-easingcubic-bezier(0.4, 0, 0.2, 1)Tasoitusfunktio
--vt-slide-down-distance30%Liukumatka
MuuttujaOletusKuvaus
--vt-zoom-duration200msAnimaation kesto
--vt-zoom-easingcubic-bezier(0.4, 0, 0.2, 1)Tasoitusfunktio
--vt-zoom-scale0.8Skaalakerroin (vanha zoomaa tähän, uusi zoomaa tähän)
MuuttujaOletusKuvaus
--vt-zoom-out-duration200msAnimaation kesto
--vt-zoom-out-easingcubic-bezier(0.4, 0, 0.2, 1)Tasoitusfunktio
--vt-zoom-out-scale1.2Skaalakerroin (vanha zoomaa tänne, uusi zoomaa täältä)

Mukautusta varten voit ylikirjoittaa nämä muuttujat CSS:ssäsi:

:root {
--vt-fade-duration: 300ms;
--vt-slide-left-distance: 50%;
}

Vaativampaan mukautukseen kohdistaa suoraan näkymäsiirtymän pseudo-elementit:

::view-transition-old(vt-slide-left-exit) {
animation-duration: 400ms;
}

::view-transition-new(vt-slide-left-enter) {
animation-timing-function: ease-out;
}