UNPKG

tdesign-mobile-vue

Version:
161 lines (157 loc) 5.84 kB
/** * tdesign v1.7.0 * (c) 2024 TDesign Group * @license MIT */ import { _ as _slicedToArray } from '../_chunks/dep-cd74809c.mjs'; import { reactive, computed, ref } from 'vue'; import { useEventListener } from '@vueuse/core'; import { i as isObject_1 } from '../_chunks/dep-e6c129ab.mjs'; import { preventDefault } from '../shared/dom.mjs'; import '../shared/index.mjs'; import { isBrowser } from '../shared/util.mjs'; import '../_chunks/dep-8d37dbf8.mjs'; import '../_chunks/dep-620d73f7.mjs'; import '../_chunks/dep-8bf3054e.mjs'; import '../_chunks/dep-91d696ea.mjs'; import '../_chunks/dep-3d249f65.mjs'; import '../_chunks/dep-6303c50c.mjs'; import '../_chunks/dep-019e292f.mjs'; import '../_chunks/dep-32364550.mjs'; import '../_chunks/dep-9b2de386.mjs'; import '../shared/functions.mjs'; import '../shared/component.mjs'; import '../shared/constants.mjs'; import '../config.mjs'; import '../shared/render.mjs'; import '../_chunks/dep-60cadef8.mjs'; import '../_chunks/dep-8140c29b.mjs'; import '../_chunks/dep-0d52e58f.mjs'; import '../_chunks/dep-a836a38c.mjs'; import '../_chunks/dep-0ea7bbde.mjs'; import '../_chunks/dep-b437ef0b.mjs'; import '../shared/render-tnode.mjs'; import '../shared/useToggle/index.mjs'; import '../shared/useCountDown/index.mjs'; import '../_chunks/dep-80e4de18.mjs'; import '../shared/useCountDown/utils.mjs'; import '../_chunks/dep-52fdc8e1.mjs'; import '../shared/useDefault/index.mjs'; import '../shared/useChildSlots/index.mjs'; import '../_chunks/dep-f0f403be.mjs'; import '../shared/useVModel/index.mjs'; import '../_chunks/dep-6917b9bc.mjs'; import '../shared/useTouch/index.mjs'; import '../shared/useScrollParent/index.mjs'; import '../shared/useExpose/index.mjs'; import '../shared/useTest/index.mjs'; import '../_chunks/dep-219bb5a7.mjs'; import '../shared/useClickAway/index.mjs'; import '../shared/useGesture/index.mjs'; import '@use-gesture/vanilla'; import '../shared/hover.mjs'; var noop = function noop() {}; function useSwipe(target) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var _options$threshold = options.threshold, threshold = _options$threshold === void 0 ? 50 : _options$threshold, onSwipe = options.onSwipe, onSwipeEnd = options.onSwipeEnd, onSwipeStart = options.onSwipeStart, _options$listenerOpti = options.listenerOptions, listenerOptions = _options$listenerOpti === void 0 ? false : _options$listenerOpti; var coordsStart = reactive({ x: 0, y: 0 }); var coordsEnd = reactive({ x: 0, y: 0 }); var diffX = computed(function () { return coordsStart.x - coordsEnd.x; }); var diffY = computed(function () { return coordsStart.y - coordsEnd.y; }); var max = Math.max, abs = Math.abs; var isThresholdExceeded = computed(function () { return max(abs(diffX.value), abs(diffY.value)) >= threshold; }); var isSwiping = ref(false); var direction = computed(function () { if (!isThresholdExceeded.value) return "none"; if (abs(diffX.value) > abs(diffY.value)) { return diffX.value > 0 ? "left" : "right"; } return diffY.value > 0 ? "up" : "down"; }); var getTouchEventCoords = function getTouchEventCoords(e) { return [e.touches[0].clientX, e.touches[0].clientY]; }; var updateCoordsStart = function updateCoordsStart(x, y) { coordsStart.x = x; coordsStart.y = y; }; var updateCoordsEnd = function updateCoordsEnd(x, y) { coordsEnd.x = x; coordsEnd.y = y; }; var isPassiveEventSupported = checkPassiveEventSupport(); var onTouchEnd = function onTouchEnd(e) { if (isSwiping.value) onSwipeEnd === null || onSwipeEnd === void 0 || onSwipeEnd(e, direction.value); isSwiping.value = false; }; var stops = [useEventListener(target, "touchstart", function (e) { if (e.touches.length !== 1) return; if (listenerOptions === true || isObject_1(listenerOptions) && listenerOptions.capture && !listenerOptions.passive) preventDefault(e, false); var _getTouchEventCoords = getTouchEventCoords(e), _getTouchEventCoords2 = _slicedToArray(_getTouchEventCoords, 2), x = _getTouchEventCoords2[0], y = _getTouchEventCoords2[1]; updateCoordsStart(x, y); updateCoordsEnd(x, y); onSwipeStart === null || onSwipeStart === void 0 || onSwipeStart(e); }, listenerOptions), useEventListener(target, "touchmove", function (e) { if (e.touches.length !== 1) return; var _getTouchEventCoords3 = getTouchEventCoords(e), _getTouchEventCoords4 = _slicedToArray(_getTouchEventCoords3, 2), x = _getTouchEventCoords4[0], y = _getTouchEventCoords4[1]; updateCoordsEnd(x, y); if (!isSwiping.value && isThresholdExceeded.value) isSwiping.value = true; if (isSwiping.value) onSwipe === null || onSwipe === void 0 || onSwipe(e); }, listenerOptions), useEventListener(target, "touchend", onTouchEnd, listenerOptions), useEventListener(target, "touchcancel", onTouchEnd, listenerOptions)]; var stop = function stop() { return stops.forEach(function (s) { return s(); }); }; return { isPassiveEventSupported: isPassiveEventSupported, isSwiping: isSwiping, direction: direction, coordsStart: coordsStart, coordsEnd: coordsEnd, lengthX: diffX, lengthY: diffY, stop: stop }; } function checkPassiveEventSupport() { var document = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : isBrowser ? window.document : void 0; if (!document) return false; var supportsPassive = false; var optionsBlock = { get passive() { supportsPassive = true; return false; } }; document.addEventListener("x", noop, optionsBlock); document.removeEventListener("x", noop); return supportsPassive; } export { useSwipe }; //# sourceMappingURL=useSwipe.mjs.map