Skip to content

Instantly share code, notes, and snippets.

@gargroh
Created January 6, 2020 13:53
Show Gist options
  • Save gargroh/e36b678b40edaa3e9888c8770fdf4796 to your computer and use it in GitHub Desktop.
Save gargroh/e36b678b40edaa3e9888c8770fdf4796 to your computer and use it in GitHub Desktop.
import React from 'react';
export default function useResizer() {
let dragging = React.useRef(false);
let startPos = React.useRef(0);
const [delta, setDelta] = React.useState(0);
const [dragEnded, setDragEnded] = React.useState(false);
React.useEffect(() => {
document.addEventListener('mousemove', onMouseMove);
document.addEventListener('mouseup', endDrag);
return () => {
document.removeEventListener('mousemove', onMouseMove);
document.removeEventListener('mouseup', endDrag);
};
}, []);
function startDrag(e) {
dragging.current = true;
startPos.current = e.screenX;
setDragEnded(false);
// console.log("startDrag", startPos.current, dragging.current);
}
function onMouseMove(e) {
if (dragging.current) {
e.preventDefault();
const moveDiff = e.screenX - startPos.current;
// console.log("mouseMove", moveDiff);
// useDebounce(setDelta(moveDiff), 100);
setDelta(moveDiff);
}
}
function endDrag(e) {
dragging.current = false;
setDragEnded(true);
// console.log("endDrag", e);
}
return {
onMouseDown: startDrag,
style: { cursor: 'col-resize' },
delta,
dragEnded
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment