The HTML 5 drag'n'drop API allows you to implement drag'n'drop with the same code on most desktop browsers. Unfortunately, you'll notice iOS doesn't support it, so no iPad (or Android) action for you!
Luckily, WebKit gives us enough tools to shim seamlessly. If you drop this script in your page your existing HTML 5 drag'n'drop code should just work.
Check out the demo to see it in action. It also works on Android.
If you want enter/over/leave events, add a config object to the page before you include the shim.
If you want to the user to hold to drag, add a config object to the page before you include the shim.
By default the shim will simulate a mouseclick when a user touches an anchor. See here for more details. Sometimes we want to disable that functionality since it can lead to unintended clicks during a scroll, and you may have other libraries in place to ensure the appropriate response. You can do that by setting the 'simulateAnchorClick' option to 'false'.
To match the HTML5 and and drop spec, links and images are implicitly treated as draggable. You can turn off this behavior by setting 'requireExplicitDraggable' to 'true'. This way, only elements with the
draggable attribute set to
true will be draggable.
npm install --save drag-drop-webkit-mobile
var iosDragDropShim = ;// options are optional ;);
iOS10 introduced a regression on
touchmove handling where
event.preventDefault() is not respected.
If you run into a situation where dragging and scrolling occur simultaneously apply the fix mentioned in #77.
dragleaveenabled via config flag
To the amazing contributors who've provided massive extensions and fixes to the original.
@rem - who created the original demo used to demo this shim's drop-in nature.