Frontmatter
| id | 8911 |
| title | Enable Mouse Drag Scrolling in Grid ScrollManager |
| state | Closed |
| labels | aifeature |
| assignees | tobiu |
| createdAt | Jan 30, 2026, 11:49 AM |
| updatedAt | Jan 30, 2026, 12:33 PM |
| githubUrl | https://github.com/neomjs/neo/issues/8911 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Jan 30, 2026, 12:32 PM |
Enable Mouse Drag Scrolling in Grid ScrollManager
tobiu assigned to @tobiu on Jan 30, 2026, 12:31 PM
tobiu closed this issue on Jan 30, 2026, 12:32 PM

tobiu
Jan 30, 2026, 12:33 PM
Input from Gemini 3 Pro:
✦ I have implemented the mouse drag scrolling enhancements in
src/grid/ScrollManager.mjs.Changes:
- Mouse Listener Support: Added
mousedown,mousemove(local),mouseup, andmouseleavelisteners togridBodyinconstruct.- Unified Delta Logic: Implemented
onMouseDown,onMouseMove,onMouseUp,onMouseLeaveto handle drag-to-scroll logic, mirroring the touch implementation but isolated for mouse events.- Config: Added
mouseDragScroll_(defaulttrue) to toggle the feature.
- Added
afterSetMouseDragScrollto toggle theneo-mouse-drag-scrollclass on the body.- Updated
resources/scss/src/grid/Body.scssto disableuser-selectwhen this class is present.- Touch Conflict Resolution: Added logic in
constructto automatically setmouseDragScroll = falseifNeo.config.hasTouchEventsis detected, preventing conflicts on hybrid devices.- State: Added
isMouseDragging,lastMouseX,lastMouseYto track drag state.This implementation allows users to scroll the grid by dragging with the mouse, improving DX for users without horizontal scrolling hardware.
Closing the ticket.
Enhance
Neo.grid.ScrollManagerto support mouse-based drag-to-scroll on desktop, improving DX for users without horizontal scroll wheels.Requirements:
mousedown,mousemove,mouseup, andmouseleavelisteners togridBody.onMouseDown,onMouseMove,onMouseUp,onMouseLeavehandlers inScrollManager.deltaXanddeltaYfrom mouse movements and apply them viaDomAccess.scrollTo, mirroring the existing touch logic.mouseDragScroll_config (default:true) to toggle this feature.preventDefault) to give a "Hand Tool" feel.mousemovelistener must be registered withlocal: trueto avoid flooding the worker bridge.Architecture: This implementation remains isolated within
ScrollManagerand does not require enabling the globalTouchsensor on desktop, avoiding conflicts with the mainDragDropsystem.