File tree Expand file tree Collapse file tree
fixtures/view-transition/src/components Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -3,6 +3,7 @@ import React, {
33 useLayoutEffect ,
44 useEffect ,
55 useState ,
6+ unstable_addTransitionType as addTransitionType ,
67} from 'react' ;
78
89import Chrome from './Chrome' ;
@@ -35,11 +36,23 @@ export default function App({assets, initialURL}) {
3536 if ( ! event . canIntercept ) {
3637 return ;
3738 }
39+ const navigationType = event . navigationType ;
40+ const previousIndex = window . navigation . currentEntry . index ;
3841 const newURL = new URL ( event . destination . url ) ;
3942 event . intercept ( {
4043 handler ( ) {
4144 let promise ;
4245 startTransition ( ( ) => {
46+ addTransitionType ( 'navigation-' + navigationType ) ;
47+ if ( navigationType === 'traverse' ) {
48+ // For traverse types it's useful to distinguish going back or forward.
49+ const nextIndex = event . destination . index ;
50+ if ( nextIndex > previousIndex ) {
51+ addTransitionType ( 'navigation-forward' ) ;
52+ } else if ( nextIndex < previousIndex ) {
53+ addTransitionType ( 'navigation-back' ) ;
54+ }
55+ }
4356 promise = new Promise ( resolve => {
4457 setRouterState ( {
4558 url : newURL . pathname + newURL . search ,
Original file line number Diff line number Diff line change @@ -36,7 +36,7 @@ function Component() {
3636
3737export default function Page ( { url, navigate} ) {
3838 const show = url === '/?b' ;
39- function onTransition ( viewTransition ) {
39+ function onTransition ( viewTransition , types ) {
4040 const keyframes = [
4141 { rotate : '0deg' , transformOrigin : '30px 8px' } ,
4242 { rotate : '360deg' , transformOrigin : '30px 8px' } ,
@@ -59,6 +59,9 @@ export default function Page({url, navigate}) {
5959 </ button >
6060 < ViewTransition className = "none" >
6161 < div >
62+ < ViewTransition className = { transitions [ 'slide-on-nav' ] } >
63+ < h1 > { ! show ? 'A' : 'B' } </ h1 >
64+ </ ViewTransition >
6265 { show ? (
6366 < div >
6467 { a }
Original file line number Diff line number Diff line change 99 }
1010}
1111
12- @keyframes exit-slide-left {
12+ @keyframes enter-slide-left {
13+ 0% {
14+ opacity : 0 ;
15+ translate : 200px 0 ;
16+ }
17+ 100% {
18+ opacity : 1 ;
19+ translate : 0 0 ;
20+ }
21+ }
22+
23+ @keyframes exit-slide-right {
1324 0% {
1425 opacity : 1 ;
1526 translate : 0 0 ;
2031 }
2132}
2233
34+ @keyframes exit-slide-left {
35+ 0% {
36+ opacity : 1 ;
37+ translate : 0 0 ;
38+ }
39+ 100% {
40+ opacity : 0 ;
41+ translate : -200px 0 ;
42+ }
43+ }
44+
2345::view-transition-new (.enter-slide-right ): only-child {
2446 animation : enter-slide-right ease-in 0.25s ;
2547}
2648::view-transition-old (.exit-slide-left ): only-child {
2749 animation : exit-slide-left ease-in 0.25s ;
2850}
51+
52+ : root : active-view-transition-type (navigation-back ) {
53+ & ::view-transition-new (.slide-on-nav ) {
54+ animation : enter-slide-right ease-in 0.25s ;
55+ }
56+ & ::view-transition-old (.slide-on-nav ) {
57+ animation : exit-slide-right ease-in 0.25s ;
58+ }
59+ }
60+
61+ : root : active-view-transition-type (navigation-forward ) {
62+ & ::view-transition-new (.slide-on-nav ) {
63+ animation : enter-slide-left ease-in 0.25s ;
64+ }
65+ & ::view-transition-old (.slide-on-nav ) {
66+ animation : exit-slide-left ease-in 0.25s ;
67+ }
68+ }
You can’t perform that action at this time.
0 commit comments