UNPKG

tdesign-mobile-vue

Version:
161 lines (153 loc) 5.98 kB
/** * tdesign v1.13.2 * (c) 2026 TDesign Group * @license MIT */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _slicedToArray = require('@babel/runtime/helpers/slicedToArray'); var Vue = require('vue'); var core = require('@vueuse/core'); var shared_dom = require('../shared/dom.js'); var isObject = require('../_chunks/dep-c041cd95.js'); var shared_util = require('../shared/util.js'); require('../_chunks/dep-abe9931d.js'); require('../_chunks/dep-d16bf091.js'); require('@babel/runtime/helpers/typeof'); require('../_chunks/dep-db763263.js'); require('../_chunks/dep-c6554877.js'); require('../_chunks/dep-a8725fec.js'); require('../hooks/useClass.js'); require('../_chunks/dep-ede0b0a5.js'); require('@babel/runtime/helpers/defineProperty'); require('../_chunks/dep-dafca6f5.js'); require('../_common/js/global-config/mobile/default-config.js'); require('../_common/js/global-config/mobile/locale/zh_CN.js'); require('../_chunks/dep-88b647f4.js'); require('../_chunks/dep-f339c931.js'); require('dayjs'); require('../_chunks/dep-89205991.js'); require('../_chunks/dep-082c7326.js'); require('../_chunks/dep-591548d1.js'); require('../_chunks/dep-a9fd9906.js'); require('../_chunks/dep-a837a88d.js'); require('../_chunks/dep-d2416277.js'); require('../_chunks/dep-4a0acbaa.js'); require('../_chunks/dep-f5894bc3.js'); require('../_chunks/dep-d404c733.js'); require('../_chunks/dep-bd009758.js'); require('../_chunks/dep-83213f5d.js'); require('../_chunks/dep-412d3c4b.js'); require('../_chunks/dep-644f5d6a.js'); require('../_chunks/dep-933759bc.js'); require('../_chunks/dep-a625ee7d.js'); require('../_chunks/dep-e49294a5.js'); require('../_chunks/dep-a1831458.js'); require('../_chunks/dep-dea6ba04.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray); 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 = Vue.reactive({ x: 0, y: 0 }); var coordsEnd = Vue.reactive({ x: 0, y: 0 }); var diffX = Vue.computed(function () { return coordsStart.x - coordsEnd.x; }); var diffY = Vue.computed(function () { return coordsStart.y - coordsEnd.y; }); var max = Math.max, abs = Math.abs; var isThresholdExceeded = Vue.computed(function () { return max(abs(diffX.value), abs(diffY.value)) >= threshold; }); var isSwiping = Vue.ref(false); var direction = Vue.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 = [core.useEventListener(target, "touchstart", function (e) { if (e.touches.length !== 1) return; if (listenerOptions === true || isObject.isObject(listenerOptions) && listenerOptions.capture && !listenerOptions.passive) shared_dom.preventDefault(e, false); var _getTouchEventCoords = getTouchEventCoords(e), _getTouchEventCoords2 = _slicedToArray__default["default"](_getTouchEventCoords, 2), x = _getTouchEventCoords2[0], y = _getTouchEventCoords2[1]; updateCoordsStart(x, y); updateCoordsEnd(x, y); onSwipeStart === null || onSwipeStart === void 0 || onSwipeStart(e); }, listenerOptions), core.useEventListener(target, "touchmove", function (e) { if (e.touches.length !== 1) return; var _getTouchEventCoords3 = getTouchEventCoords(e), _getTouchEventCoords4 = _slicedToArray__default["default"](_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), core.useEventListener(target, "touchend", onTouchEnd, listenerOptions), core.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] : shared_util.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; } exports.useSwipe = useSwipe; //# sourceMappingURL=useSwipe.js.map