Skip to content

Commit 31341cc

Browse files
committed
fix(transition) parse translationY offset correctly
1 parent 91c501e commit 31341cc

File tree

1 file changed

+27
-23
lines changed

1 file changed

+27
-23
lines changed

src/image-viewer-transitions.ts

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,22 @@ export function registerCustomTransitions(config: Config) {
1111
export class ImageViewerEnter extends Transition {
1212
init() {
1313

14-
let ele = this.enteringView.pageRef().nativeElement;
14+
const ele = this.enteringView.pageRef().nativeElement;
1515

16-
let fromPosition = this.enteringView.data.position;
17-
let toPosition = ele.querySelector('img').getBoundingClientRect();
18-
let flipS = fromPosition.width / toPosition.width;
19-
let flipY = fromPosition.top - toPosition.top;
20-
let flipX = fromPosition.left - toPosition.left;
16+
const fromPosition = this.enteringView.data.position;
17+
const toPosition = ele.querySelector('img').getBoundingClientRect();
18+
const flipS = fromPosition.width / toPosition.width;
19+
const flipY = fromPosition.top - toPosition.top;
20+
const flipX = fromPosition.left - toPosition.left;
2121

22-
let backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop'));
23-
let image = new Animation(this.plt, ele.querySelector('.image'));
22+
const backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop'));
23+
const image = new Animation(this.plt, ele.querySelector('.image'));
2424

2525
image.fromTo('translateY', `${flipY}px`, '0px')
2626
.fromTo('translateX', `${flipX}px`, '0px')
27-
.fromTo('scale', flipS, '1');
27+
.fromTo('scale', flipS, '1')
28+
.beforeStyles({ 'transform-origin': '0 0' })
29+
.afterClearStyles(['transform-origin']);
2830

2931
backdrop.fromTo('opacity', '0.01', '1');
3032

@@ -37,11 +39,11 @@ export class ImageViewerEnter extends Transition {
3739
const enteringNavbarEle = enteringPageEle.querySelector('ion-navbar');
3840
const enteringBackBtnEle = enteringPageEle.querySelector('.back-button');
3941

40-
let enteringNavBar = new Animation(this.plt, enteringNavbarEle);
42+
const enteringNavBar = new Animation(this.plt, enteringNavbarEle);
4143
enteringNavBar.beforeAddClass('show-navbar');
4244
this.add(enteringNavBar);
4345

44-
let enteringBackButton = new Animation(this.plt, enteringBackBtnEle);
46+
const enteringBackButton = new Animation(this.plt, enteringBackBtnEle);
4547
this.add(enteringBackButton);
4648
enteringBackButton.beforeAddClass('show-back-button');
4749
}
@@ -50,30 +52,32 @@ export class ImageViewerEnter extends Transition {
5052
export class ImageViewerLeave extends Transition {
5153
init() {
5254

53-
let ele = this.leavingView.pageRef().nativeElement;
55+
const ele = this.leavingView.pageRef().nativeElement;
5456

55-
let toPosition = this.leavingView.data.position;
56-
let fromPosition = ele.querySelector('img').getBoundingClientRect();
57+
const toPosition = this.leavingView.data.position;
58+
const fromPosition = ele.querySelector('img').getBoundingClientRect();
5759

5860
let offsetY = 0;
59-
let imageYOffset = ele.querySelector('.image').style[this.plt.Css.transform];
61+
const imageYOffset = ele.querySelector('.image').style[this.plt.Css.transform];
6062
if (imageYOffset) {
61-
let regexResult = imageYOffset.match(/translateY\((-?\d+)px\)/);
63+
const regexResult = imageYOffset.match(/translateY\((-?\d*\.?\d*)px\)/);
6264
offsetY = regexResult ? parseFloat(regexResult[1]) : offsetY;
6365
}
6466

65-
let flipS = toPosition.width / fromPosition.width;
66-
let flipY = toPosition.top - fromPosition.top + offsetY;
67-
let flipX = toPosition.left - fromPosition.left;
67+
const flipS = toPosition.width / fromPosition.width;
68+
const flipY = toPosition.top - fromPosition.top + offsetY;
69+
const flipX = toPosition.left - fromPosition.left;
6870

69-
let backdropOpacity = ele.querySelector('ion-backdrop').style['opacity'];
71+
const backdropOpacity = ele.querySelector('ion-backdrop').style['opacity'];
7072

71-
let backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop'));
72-
let image = new Animation(this.plt, ele.querySelector('.image'));
73+
const backdrop = new Animation(this.plt, ele.querySelector('ion-backdrop'));
74+
const image = new Animation(this.plt, ele.querySelector('.image'));
7375

7476
image.fromTo('translateY', `${offsetY}px`, `${flipY}px`)
7577
.fromTo('translateX', `0px`, `${flipX}px`)
76-
.fromTo('scale', '1', flipS);
78+
.fromTo('scale', '1', flipS)
79+
.beforeStyles({ 'transform-origin': '0 0' })
80+
.afterClearStyles(['transform-origin']);
7781

7882
backdrop.fromTo('opacity', backdropOpacity, '0');
7983

0 commit comments

Comments
 (0)