tdesign-mobile-vue
Version:
tdesign-mobile-vue
161 lines (153 loc) • 5.98 kB
JavaScript
/**
* tdesign v1.13.2
* (c) 2026 TDesign Group
* @license MIT
*/
;
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