import { window, document } from 'ssr-window';
|
import $ from '../../../utils/dom';
|
import Utils from '../../../utils/utils';
|
|
export default function (event) {
|
const swiper = this;
|
const data = swiper.touchEventsData;
|
const { params, touches } = swiper;
|
|
if (swiper.animating && params.preventInteractionOnTransition) {
|
return;
|
}
|
let e = event;
|
if (e.originalEvent) e = e.originalEvent;
|
const $targetEl = $(e.target);
|
|
if (params.touchEventsTarget === 'wrapper') {
|
if (!$targetEl.closest(swiper.wrapperEl).length) return;
|
}
|
data.isTouchEvent = e.type === 'touchstart';
|
if (!data.isTouchEvent && 'which' in e && e.which === 3) return;
|
if (!data.isTouchEvent && 'button' in e && e.button > 0) return;
|
if (data.isTouched && data.isMoved) return;
|
if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`)[0]) {
|
swiper.allowClick = true;
|
return;
|
}
|
if (params.swipeHandler) {
|
if (!$targetEl.closest(params.swipeHandler)[0]) return;
|
}
|
|
touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
|
touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
|
const startX = touches.currentX;
|
const startY = touches.currentY;
|
|
// Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore
|
|
const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;
|
const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;
|
if (
|
edgeSwipeDetection
|
&& ((startX <= edgeSwipeThreshold)
|
|| (startX >= window.screen.width - edgeSwipeThreshold))
|
) {
|
return;
|
}
|
|
Utils.extend(data, {
|
isTouched: true,
|
isMoved: false,
|
allowTouchCallbacks: true,
|
isScrolling: undefined,
|
startMoving: undefined,
|
});
|
|
touches.startX = startX;
|
touches.startY = startY;
|
data.touchStartTime = Utils.now();
|
swiper.allowClick = true;
|
swiper.updateSize();
|
swiper.swipeDirection = undefined;
|
if (params.threshold > 0) data.allowThresholdMove = false;
|
if (e.type !== 'touchstart') {
|
let preventDefault = true;
|
if ($targetEl.is(data.formElements)) preventDefault = false;
|
if (
|
document.activeElement
|
&& $(document.activeElement).is(data.formElements)
|
&& document.activeElement !== $targetEl[0]
|
) {
|
document.activeElement.blur();
|
}
|
|
const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;
|
if (params.touchStartForcePreventDefault || shouldPreventDefault) {
|
e.preventDefault();
|
}
|
}
|
swiper.emit('touchStart', e);
|
}
|