@@ -61,13 +61,15 @@ const createLargeTitleTransition = (rootAnimation: IonicAnimation, rtl: boolean,
6161} ;
6262
6363const 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` ;
6466 const START_TEXT_TRANSLATE = ( rtl ) ? '7px' : '-7px' ;
6567 const END_TEXT_TRANSLATE = ( rtl ) ? '-4px' : '4px' ;
6668
6769 const ICON_TRANSLATE = ( rtl ) ? '-4px' : '4px' ;
6870
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' ;
7173
7274 const FORWARD_TEXT_KEYFRAMES = [
7375 { 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
113115
114116 enteringBackButtonTextAnimation
115117 . beforeStyles ( {
116- 'transform-origin' : `${ TEXT_TRANSFORM_ORIGIN_X } center`
118+ 'transform-origin' : `${ TEXT_ORIGIN_X } center`
117119 } )
118120 . beforeAddWrite ( ( ) => {
119121 backButtonEl . style . setProperty ( 'display' , 'none' ) ;
122+ clonedBackButtonEl . style . setProperty ( TEXT_ORIGIN_X , BACK_BUTTON_START_OFFSET ) ;
120123 } )
121124 . afterAddWrite ( ( ) => {
122125 backButtonEl . style . setProperty ( 'display' , '' ) ;
123126 clonedBackButtonEl . style . setProperty ( 'display' , 'none' ) ;
127+ clonedBackButtonEl . style . removeProperty ( TEXT_ORIGIN_X ) ;
124128 } )
125129 . keyframes ( TEXT_KEYFRAMES ) ;
126130
127131 enteringBackButtonIconAnimation
128132 . beforeStyles ( {
129- 'transform-origin' : `${ ICON_TRANSFORM_ORIGIN_X } center`
133+ 'transform-origin' : `${ ICON_ORIGIN_X } center`
130134 } )
131135 . keyframes ( ICON_KEYFRAMES ) ;
132136
133137 rootAnimation . addAnimation ( [ enteringBackButtonTextAnimation , enteringBackButtonIconAnimation ] ) ;
134138} ;
135139
136140const 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` ;
137143 const START_TRANSLATE = ( rtl ) ? '-18px' : '18px' ;
138- const TRANSFORM_ORIGIN_X = ( rtl ) ? 'right' : 'left' ;
144+ const ORIGIN_X = ( rtl ) ? 'right' : 'left' ;
139145
140146 const BACKWARDS_KEYFRAMES = [
141147 { offset : 0 , opacity : 0 , transform : `translate(${ START_TRANSLATE } , ${ addSafeArea ( 0 ) } ) scale(0.49)` } ,
@@ -160,10 +166,11 @@ const animateLargeTitle = (rootAnimation: IonicAnimation, rtl: boolean, backDire
160166
161167 clonedLargeTitleAnimation
162168 . beforeStyles ( {
163- 'transform-origin' : `${ TRANSFORM_ORIGIN_X } center` ,
169+ 'transform-origin' : `${ ORIGIN_X } center` ,
164170 'height' : '46px' ,
165171 'display' : '' ,
166- 'position' : 'relative'
172+ 'position' : 'relative' ,
173+ [ ORIGIN_X ] : TITLE_START_OFFSET
167174 } )
168175 . beforeAddWrite ( ( ) => {
169176 largeTitleEl . style . setProperty ( 'display' , 'none' ) ;
0 commit comments