@svelte-put/dragscroll
action to add "drag-to-scroll" behavior
Installation
terminal
npm install --save-dev @svelte-put/dragscroll
Quick Start
quick start
<script>
import { dragscroll } from '@svelte-put/dragscroll';
</script>
<div use:dragscroll>...</div>
Default, no parameters: drag to scroll horizontally
quick start demo
Customization
Specifying the Scroll Axis
dragscroll
supports both axes. You can specifying the scrolling axis or both with
the axis
parameter. By default, axis
is set to x
.
scroll axis
<div use:dragscroll={{ axis: 'x' }}>...</div>
<div use:dragscroll={{ axis: 'y' }}>...</div>
<div use:dragscroll={{ axis: 'both' }}>...</div>
Select the scroll axis
scroll axis demo
mouse
vs pointer
By default, dragscroll
assumes
PointerEvent
(
pointerup
, pointerdown
, pointermove
,
pointerleave
). You can switch to
MouseEvent
equivalents by specifying the event
parameter.
mouse vs pointer
<div use:dragscroll={{ event: 'pointer' }}>...</div>
<div use:dragscroll={{ event: 'mouse' }}>...</div>
Disabling Cursor Handling
By default, dragscroll
adds cursor: grab
, and
cursor: grabbing
on mousedown
. This can be disabled by setting the
cursor
parameter to false
(default to true
).
cursor parameter
div use:dragscroll={{ cursor: false }}>...</div>
Limitation
There is known issue when using
scroll-snap-align , where view tends to be unresponsive to dragscroll
and requires a great
mousemove
length to snap to the next box.
Below, try using scrollbar to confirm snap-align is working as expected. Then try dragging with mouse, notice that it only works when dragged over almost the entire width of the box.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Limitation with scroll-snap
Here is the source code
for dragscroll
. Feel free to open a PR if you've found a workaround for this.
Thanks!
Happy dragging! 👨💻