Files
dbgate/packages/web/src/utility/splitterDrag.ts
2021-02-28 09:27:57 +01:00

39 lines
1.1 KiB
TypeScript

export default function splitterDrag(node, axes) {
let resizeStart = null;
const handleResizeDown = e => {
resizeStart = e[axes];
document.addEventListener('mousemove', handleResizeMove, true);
document.addEventListener('mouseup', handleResizeEnd, true);
};
const handleResizeMove = e => {
e.preventDefault();
const diff = e[axes] - resizeStart;
resizeStart = e[axes];
node.dispatchEvent(
new CustomEvent('resizeSplitter', {
detail: diff,
})
);
};
const handleResizeEnd = e => {
e.preventDefault();
resizeStart = null;
document.removeEventListener('mousemove', handleResizeMove, true);
document.removeEventListener('mouseup', handleResizeEnd, true);
};
node.addEventListener('mousedown', handleResizeDown);
return {
destroy() {
node.removeEventListener('mousedown', handleResizeDown);
if (resizeStart != null) {
document.removeEventListener('mousemove', handleResizeMove, true);
document.removeEventListener('mouseup', handleResizeEnd, true);
}
},
};
}