UNPKG

@jbrowse/plugin-linear-genome-view

Version:

JBrowse 2 linear genome view

61 lines (60 loc) 2.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useSideScroll = useSideScroll; const react_1 = require("react"); function useSideScroll(model) { const [mouseDragging, setMouseDragging] = (0, react_1.useState)(false); const scheduled = (0, react_1.useRef)(false); const prevX = (0, react_1.useRef)(0); (0, react_1.useEffect)(() => { let cleanup = () => { }; function globalMouseMove(event) { event.preventDefault(); const currX = event.clientX; const distance = currX - prevX.current; if (distance) { if (!scheduled.current) { scheduled.current = true; window.requestAnimationFrame(() => { model.horizontalScroll(-distance); scheduled.current = false; prevX.current = event.clientX; }); } } } function globalMouseUp() { prevX.current = 0; if (mouseDragging) { setMouseDragging(false); } } if (mouseDragging) { window.addEventListener('mousemove', globalMouseMove, true); window.addEventListener('mouseup', globalMouseUp, true); cleanup = () => { window.removeEventListener('mousemove', globalMouseMove, true); window.removeEventListener('mouseup', globalMouseUp, true); }; } return cleanup; }, [model, mouseDragging]); function mouseDown(event) { if (event.shiftKey) { return; } const target = event.target; if (target.draggable || target.dataset.resizer) { return; } if (event.button === 0) { prevX.current = event.clientX; setMouseDragging(true); } } function mouseUp(event) { event.preventDefault(); setMouseDragging(false); } return { mouseDown, mouseUp }; }