Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

react-dnd-touch-backend

Package Overview
Dependencies
Maintainers
2
Versions
71
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-dnd-touch-backend

Touch backend for react-dnd

  • 0.8.0
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
334K
increased by10.66%
Maintainers
2
Weekly downloads
 
Created
Source
react logo

react-dnd-touch-backend

npm version Dependency Status devDependency Status gzip size

Touch Backend for react-dnd

Instalation

npm:

 npm install react-dnd-touch-backend --save

yarn:

 yarn add react-dnd-touch-backend

Usage

Follow react-dnd docs to setup your app. Then swap out HTML5Backend for TouchBackend as such:

import React, { Component } from 'react';
import TouchBackend from 'react-dnd-touch-backend';
import { DragDropContext } from 'react-dnd';

class YourApp extends Component {
  /* ... */
}

export default 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
  • enableHoverOutsideTarget

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
// allow vertical scrolling
DragDropContext(TouchBackend({ scrollAngleRanges: [{ start: 30, end: 150 }, { start: 210, end: 330 }] }));

// allow horizontal scrolling
DragDropContext(TouchBackend({ scrollAngleRanges: [{ start: 300 }, { end: 60 }, { start: 120, end: 240 }] }));

enableHoverOutsideTarget

  • Continue dragging of currently dragged element when pointer leaves DropTarget area
  • Default: undefined
DragDropContext(TouchBackend({ enableHoverOutsideTarget: true }));

getDropTargetElementsAtPoint

  • Specify a custom function to find drop target elements at the given point. Useful for improving performance in environments (iOS Safari) where document.elementsFromPoint is not available.
  • Default: undefined (use document.elementsFromPoint or inline elementsFromPoint "polyfill")
const hasNative = document && (document.elementsFromPoint || document.msElementsFromPoint);

function getDropTargetElementsAtPoint(x, y, availableDropTargets) {
  return dropTargets.filter(t => {
    const rect = t.getBoundingClientRect();
    return (x >= rect.left && x <= rect.right && 
            y <= rect.bottom && y >= rect.top);
  });
}

// use custom function only if elementsFromPoint is not supported 
DragDropContext(TouchBackend({
  getDropTargetElementsAtPoint: !hasNative && getDropTargetElementsAtPoint,
}))

Examples

The examples folder has a sample integration. In order to build it, run:

npm:

npm i && npm run dev

yarn:

yarn install && yarn 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.

Keywords

FAQs

Package last updated on 18 Feb 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc