1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- /*!
- * (C) Ionic http://ionicframework.com - MIT License
- */
- import { j as clamp } from './helpers-d94bc8ad.js';
- import { i as isRTL } from './dir-babeabeb.js';
- import { createGesture } from './index-39782642.js';
- import './index-cfd9c1f2.js';
- import './gesture-controller-314a54f6.js';
- const createSwipeBackGesture = (el, canStartHandler, onStartHandler, onMoveHandler, onEndHandler) => {
- const win = el.ownerDocument.defaultView;
- let rtl = isRTL(el);
- /**
- * Determine if a gesture is near the edge
- * of the screen. If true, then the swipe
- * to go back gesture should proceed.
- */
- const isAtEdge = (detail) => {
- const threshold = 50;
- const { startX } = detail;
- if (rtl) {
- return startX >= win.innerWidth - threshold;
- }
- return startX <= threshold;
- };
- const getDeltaX = (detail) => {
- return rtl ? -detail.deltaX : detail.deltaX;
- };
- const getVelocityX = (detail) => {
- return rtl ? -detail.velocityX : detail.velocityX;
- };
- const canStart = (detail) => {
- /**
- * The user's locale can change mid-session,
- * so we need to check text direction at
- * the beginning of every gesture.
- */
- rtl = isRTL(el);
- return isAtEdge(detail) && canStartHandler();
- };
- const onMove = (detail) => {
- // set the transition animation's progress
- const delta = getDeltaX(detail);
- const stepValue = delta / win.innerWidth;
- onMoveHandler(stepValue);
- };
- const onEnd = (detail) => {
- // the swipe back gesture has ended
- const delta = getDeltaX(detail);
- const width = win.innerWidth;
- const stepValue = delta / width;
- const velocity = getVelocityX(detail);
- const z = width / 2.0;
- const shouldComplete = velocity >= 0 && (velocity > 0.2 || delta > z);
- const missing = shouldComplete ? 1 - stepValue : stepValue;
- const missingDistance = missing * width;
- let realDur = 0;
- if (missingDistance > 5) {
- const dur = missingDistance / Math.abs(velocity);
- realDur = Math.min(dur, 540);
- }
- onEndHandler(shouldComplete, stepValue <= 0 ? 0.01 : clamp(0, stepValue, 0.9999), realDur);
- };
- return createGesture({
- el,
- gestureName: 'goback-swipe',
- /**
- * Swipe to go back should have priority over other horizontal swipe
- * gestures. These gestures have a priority of 100 which is why 101 was chosen here.
- */
- gesturePriority: 101,
- threshold: 10,
- canStart,
- onStart: onStartHandler,
- onMove,
- onEnd,
- });
- };
- export { createSwipeBackGesture };
|