Skip to content

Commit 7f7f57e

Browse files
committed
fix(zoom): reset transform origin on zoom out
1 parent 7f5c626 commit 7f7f57e

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

src/modules/zoom/zoom.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,12 @@ export default function Zoom({ swiper, extendParams, on, emit }) {
212212
gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;
213213
currentScale = zoom.scale;
214214
isScaling = false;
215+
if (zoom.scale > 1 && gesture.slideEl) {
216+
gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);
217+
} else if (zoom.scale <= 1 && gesture.slideEl) {
218+
gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);
219+
gesture.imageEl.style.transformOrigin = ``;
220+
}
215221
if (zoom.scale === 1) gesture.slideEl = undefined;
216222
}
217223
function onTouchStart(e) {
@@ -346,7 +352,6 @@ export default function Zoom({ swiper, extendParams, on, emit }) {
346352

347353
image.currentX = newPositionX;
348354
image.currentY = newPositionY;
349-
350355
// Define if we need image drag
351356
const scaledWidth = image.width * zoom.scale;
352357
const scaledHeight = image.height * zoom.scale;
@@ -362,13 +367,14 @@ export default function Zoom({ swiper, extendParams, on, emit }) {
362367
}
363368
function onTransitionEnd() {
364369
const zoom = swiper.zoom;
365-
if (gesture.slideEl && swiper.previousIndex !== swiper.activeIndex) {
370+
if (gesture.slideEl && swiper.activeIndex !== swiper.slides.indexOf(gesture.slideEl)) {
366371
if (gesture.imageEl) {
367372
gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';
368373
}
369374
if (gesture.imageWrapEl) {
370375
gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';
371376
}
377+
gesture.slideEl.classList.remove(`${swiper.params.zoom.zoomedSlideClass}`);
372378

373379
zoom.scale = 1;
374380
currentScale = 1;
@@ -452,6 +458,7 @@ export default function Zoom({ swiper, extendParams, on, emit }) {
452458
forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;
453459
currentScale =
454460
forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;
461+
455462
if (e && !(currentScale === 1 && forceZoomRatio)) {
456463
slideWidth = gesture.slideEl.offsetWidth;
457464
slideHeight = gesture.slideEl.offsetHeight;
@@ -490,6 +497,9 @@ export default function Zoom({ swiper, extendParams, on, emit }) {
490497
translateX = 0;
491498
translateY = 0;
492499
}
500+
if (forceZoomRatio && zoom.scale === 1) {
501+
gesture.imageEl.style.transformOrigin = ``;
502+
}
493503
gesture.imageWrapEl.style.transitionDuration = '300ms';
494504
gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`;
495505
gesture.imageEl.style.transitionDuration = '300ms';
@@ -527,6 +537,7 @@ export default function Zoom({ swiper, extendParams, on, emit }) {
527537
gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';
528538
gesture.imageEl.style.transitionDuration = '300ms';
529539
gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';
540+
gesture.imageEl.style.transformOrigin = ``;
530541

531542
gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);
532543
gesture.slideEl = undefined;
@@ -563,7 +574,6 @@ export default function Zoom({ swiper, extendParams, on, emit }) {
563574
const { passiveListener, activeListenerWithCapture } = getListeners();
564575

565576
// Scale image
566-
567577
swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener);
568578
swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture);
569579
['pointerup', 'pointercancel', 'pointerout'].forEach((eventName) => {

0 commit comments

Comments
 (0)