From 80958d5e946e40d697bd0eb6fcfeed5f45579ba3 Mon Sep 17 00:00:00 2001 From: Vladimir Kharlampidi Date: Fri, 28 Jan 2022 13:21:42 +0300 Subject: [PATCH] feat(free-mode): stop scrolling when touch event happens in freeMode fixes #4616 --- src/core/events/onTouchStart.js | 9 +++++++++ src/modules/free-mode/free-mode.js | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/src/core/events/onTouchStart.js b/src/core/events/onTouchStart.js index 712c031bc..bf2100413 100644 --- a/src/core/events/onTouchStart.js +++ b/src/core/events/onTouchStart.js @@ -126,5 +126,14 @@ export default function onTouchStart(event) { e.preventDefault(); } } + if ( + swiper.params.freeMode && + swiper.params.freeMode.enabled && + swiper.freeMode && + swiper.animating && + !params.cssMode + ) { + swiper.freeMode.onTouchStart(); + } swiper.emit('touchStart', e); } diff --git a/src/modules/free-mode/free-mode.js b/src/modules/free-mode/free-mode.js index 2a8e421ac..21b770d7a 100644 --- a/src/modules/free-mode/free-mode.js +++ b/src/modules/free-mode/free-mode.js @@ -14,6 +14,14 @@ export default function freeMode({ swiper, extendParams, emit, once }) { }, }); + function onTouchStart() { + const translate = swiper.getTranslate(); + swiper.setTranslate(translate); + swiper.setTransition(0); + swiper.touchEventsData.velocities.length = 0; + swiper.freeMode.onTouchEnd({ currentPos: swiper.rtl ? swiper.translate : -swiper.translate }); + } + function onTouchMove() { const { touchEventsData: data, touches } = swiper; // Velocity @@ -213,6 +221,7 @@ export default function freeMode({ swiper, extendParams, emit, once }) { Object.assign(swiper, { freeMode: { + onTouchStart, onTouchMove, onTouchEnd, },