@@ -61,13 +61,15 @@ const createLargeTitleTransition = (rootAnimation: IonicAnimation, rtl: boolean,
61
61
} ;
62
62
63
63
const animateBackButton = ( rootAnimation : IonicAnimation , rtl : boolean , backDirection : boolean , backButtonEl : any ) => {
64
+ const backButtonBounds = backButtonEl . getBoundingClientRect ( ) ;
65
+ const BACK_BUTTON_START_OFFSET = ( rtl ) ? `calc(100% - ${ backButtonBounds . right + 4 } px)` : `${ backButtonBounds . left - 4 } px` ;
64
66
const START_TEXT_TRANSLATE = ( rtl ) ? '7px' : '-7px' ;
65
67
const END_TEXT_TRANSLATE = ( rtl ) ? '-4px' : '4px' ;
66
68
67
69
const ICON_TRANSLATE = ( rtl ) ? '-4px' : '4px' ;
68
70
69
- const TEXT_TRANSFORM_ORIGIN_X = ( rtl ) ? 'right' : 'left' ;
70
- const ICON_TRANSFORM_ORIGIN_X = ( rtl ) ? 'left' : 'right' ;
71
+ const TEXT_ORIGIN_X = ( rtl ) ? 'right' : 'left' ;
72
+ const ICON_ORIGIN_X = ( rtl ) ? 'left' : 'right' ;
71
73
72
74
const FORWARD_TEXT_KEYFRAMES = [
73
75
{ offset : 0 , opacity : 0 , transform : `translate(${ START_TEXT_TRANSLATE } , ${ addSafeArea ( 8 ) } ) scale(2.1)` } ,
@@ -113,29 +115,33 @@ const animateBackButton = (rootAnimation: IonicAnimation, rtl: boolean, backDire
113
115
114
116
enteringBackButtonTextAnimation
115
117
. beforeStyles ( {
116
- 'transform-origin' : `${ TEXT_TRANSFORM_ORIGIN_X } center`
118
+ 'transform-origin' : `${ TEXT_ORIGIN_X } center`
117
119
} )
118
120
. beforeAddWrite ( ( ) => {
119
121
backButtonEl . style . setProperty ( 'display' , 'none' ) ;
122
+ clonedBackButtonEl . style . setProperty ( TEXT_ORIGIN_X , BACK_BUTTON_START_OFFSET ) ;
120
123
} )
121
124
. afterAddWrite ( ( ) => {
122
125
backButtonEl . style . setProperty ( 'display' , '' ) ;
123
126
clonedBackButtonEl . style . setProperty ( 'display' , 'none' ) ;
127
+ clonedBackButtonEl . style . removeProperty ( TEXT_ORIGIN_X ) ;
124
128
} )
125
129
. keyframes ( TEXT_KEYFRAMES ) ;
126
130
127
131
enteringBackButtonIconAnimation
128
132
. beforeStyles ( {
129
- 'transform-origin' : `${ ICON_TRANSFORM_ORIGIN_X } center`
133
+ 'transform-origin' : `${ ICON_ORIGIN_X } center`
130
134
} )
131
135
. keyframes ( ICON_KEYFRAMES ) ;
132
136
133
137
rootAnimation . addAnimation ( [ enteringBackButtonTextAnimation , enteringBackButtonIconAnimation ] ) ;
134
138
} ;
135
139
136
140
const animateLargeTitle = ( rootAnimation : IonicAnimation , rtl : boolean , backDirection : boolean , largeTitleEl : any ) => {
141
+ const largeTitleBounds = largeTitleEl . getBoundingClientRect ( ) ;
142
+ const TITLE_START_OFFSET = ( rtl ) ? `calc(100% - ${ largeTitleBounds . right } px)` : `${ largeTitleBounds . left } px` ;
137
143
const START_TRANSLATE = ( rtl ) ? '-18px' : '18px' ;
138
- const TRANSFORM_ORIGIN_X = ( rtl ) ? 'right' : 'left' ;
144
+ const ORIGIN_X = ( rtl ) ? 'right' : 'left' ;
139
145
140
146
const BACKWARDS_KEYFRAMES = [
141
147
{ offset : 0 , opacity : 0 , transform : `translate(${ START_TRANSLATE } , ${ addSafeArea ( 0 ) } ) scale(0.49)` } ,
@@ -160,10 +166,11 @@ const animateLargeTitle = (rootAnimation: IonicAnimation, rtl: boolean, backDire
160
166
161
167
clonedLargeTitleAnimation
162
168
. beforeStyles ( {
163
- 'transform-origin' : `${ TRANSFORM_ORIGIN_X } center` ,
169
+ 'transform-origin' : `${ ORIGIN_X } center` ,
164
170
'height' : '46px' ,
165
171
'display' : '' ,
166
- 'position' : 'relative'
172
+ 'position' : 'relative' ,
173
+ [ ORIGIN_X ] : TITLE_START_OFFSET
167
174
} )
168
175
. beforeAddWrite ( ( ) => {
169
176
largeTitleEl . style . setProperty ( 'display' , 'none' ) ;
0 commit comments