react-dnd-touch-backend
Touch Backend for react-dnd
Usage
Follow react-dnd docs to setup your app. Then swap out HTML5Backend
for TouchBackend
as such:
import { default as TouchBackend } from 'react-dnd-touch-backend';
import { DragDropContext } from 'react-dnd';
var YourApp = React.createClass(
);
module.exports = DragDropContext(TouchBackend)(YourApp);
Options
You have the following options available to you, which you can pass in like so:
DragDropContext(TouchBackend(options))
Options include:
- enableTouchEvents
- enableMouseEvents
- enableKeyboardEvents
- delayTouchStart
- delayMouseStart
- touchSlop
- ignoreContextMenu
- scrollAngleRanges
Tips
Drag Preview
Since native Drag-n-Drop is not currently supported in touch devices. A custom DragPreview is required. Check out the example for a sample implementation.
We might try to build it directly in the Backend itself in the future to compensate for this limitation.
Mouse events support*
You can enable capturing mouse events by configuring your TouchBackend as follows:
DragDropContext(TouchBackend({ enableMouseEvents: true }));
NOTE: This is buggy due to the difference in touchstart/touchend
event propagation compared to mousedown/mouseup/click
. I highly recommend that you use react-dnd-html5-backend instead for a more performant native HTML5 drag capability.*
Other options
touchSlop
- Specifies the pixel distance moved before a drag is signaled.
- Default: 0
DragDropContext(TouchBackend({ touchSlop: 20 }));
ignoreContextMenu
- If true, prevents the
contextmenu
event from canceling a drag. - Default: false
DragDropContext(TouchBackend({ ignoreContextMenu: true }));
scrollAngleRanges
- Specifies ranges of angles in degrees that drag events should be ignored. This is useful when you want to allow the
user to scroll in a particular direction instead of dragging. Degrees move clockwise, 0/360 pointing to the
left.
- Default: undefined
DragDropContext(TouchBackend({ scrollAngleRanges: [{ start: 30, end: 150 }, { start: 210, end: 330 }] }));
DragDropContext(TouchBackend({ scrollAngleRanges: [{ start: 300 }, { end: 60 }, { start: 120, end: 240 }] }));
Examples
The examples
folder has a sample integration. In order to build it, run:
npm i && npm run dev
Then navigate to localhost:7789
or (IP Address):7789
in your mobile browser to access the example.
Code licensed under the MIT license. See LICENSE file for terms.