@jbrowse/plugin-linear-genome-view
Version:
JBrowse 2 linear genome view
61 lines (60 loc) • 2.08 kB
JavaScript
;
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 };
}