start-drag
Version:
Listens and composes mouse or touch events to dragging callbacks
73 lines (71 loc) • 2.48 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var src_exports = {};
__export(src_exports, {
startDrag: () => startDrag
});
module.exports = __toCommonJS(src_exports);
function startDrag(event, container, onMove, onEnd) {
const isTouch = event instanceof TouchEvent;
let initX = 0;
let initY = 0;
const move = (event2, init = false) => {
const rect = container.getBoundingClientRect();
const defaultView = container.ownerDocument.defaultView;
const offsetX = rect.left + defaultView.scrollX;
const offsetY = rect.top + defaultView.scrollY;
const isTouch2 = event2 instanceof TouchEvent;
const x = (isTouch2 ? event2.changedTouches[0].pageX : event2.pageX) - offsetX;
const y = (isTouch2 ? event2.changedTouches[0].pageY : event2.pageY) - offsetY;
if (init) {
initX = x;
initY = y;
}
onMove(event2, x, y, x - initX, y - initY);
};
move(event, true);
const destroy = () => {
if (isTouch) {
document.removeEventListener("touchmove", move);
document.removeEventListener("touchend", stop);
} else {
document.removeEventListener("mousemove", move);
document.removeEventListener("mouseup", stop);
}
};
const stop = (event2) => {
destroy();
if (typeof onEnd === "function") {
onEnd(event2);
}
};
if (isTouch) {
document.addEventListener("touchmove", move, { passive: true });
document.addEventListener("touchend", stop);
} else {
document.addEventListener("mousemove", move, { passive: true });
document.addEventListener("mouseup", stop);
}
return destroy;
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
startDrag
});
;