{ "title":"Drag and Drop", "description":"Method of easily dragging and dropping elements on a page, requiring minimal JavaScript.", "spec":"https://html.spec.whatwg.org/multipage/interaction.html#dnd", "status":"ls", "links":[ { "url":"http://html5doctor.com/native-drag-and-drop/", "title":"HTML5 Doctor article" }, { "url":"http://nettutsplus.s3.amazonaws.com/64_html5dragdrop/demo/index.html", "title":"Shopping cart demo" }, { "url":"http://html5demos.com/drag", "title":"Demo with link blocks" }, { "url":"https://www.webplatform.org/docs/dom/DragEvent", "title":"WebPlatform Docs" }, { "url":"https://github.com/MihaiValentin/setDragImage-IE", "title":"Polyfill for setDragImage in IE" }, { "url":"http://blog.teamtreehouse.com/implementing-native-drag-and-drop", "title":"Implementing Native Drag and Drop" }, { "url":"https://github.com/timruffles/ios-html5-drag-drop-shim", "title":"iOS/Android shim for HTML 5 drag'n'drop" }, { "url":"https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6542268-setdragimage-on-datatransfer-of-dragevent", "title":"Microsoft Edge setDragImage feature request on UserVoice" } ], "bugs":[ { "description":"Chrome strips out newlines from `text/uri-list` [see bug](https://code.google.com/p/chromium/issues/detail?id=239745)" }, { "description":"In Chrome, `DataTransfer.addElement` is not implemented. There is no other way to implement a draggable object which updates during the drag due to some other circumstances (e.g. changes color on a valid drop spot), as it is just a static image if `addElement` is not supported." }, { "description":"In Firefox, an element won't drag unless the `dragstart` handler sets `dataTransfer` data (even if it doesn't get retrieved). [Test case](https://codepen.io/michai/pen/NwORqO)" }, { "description":"In Firefox, drag and drop does not work when the page is served as `application/xhtml+xml` [Mozilla Bug #751778](https://bugzilla.mozilla.org/show_bug.cgi?id=751778), [Mozilla Bug #1106160](https://bugzilla.mozilla.org/show_bug.cgi?id=1106160)" }, { "description":"In Firefox, the `dragstart` event does not fire on `button` elements. This effectively disables drag and drop for `button` elements." }, { "description":"Safari doesn't implement the `DragEvent` interface. It adds a `dataTransfer` property to `MouseEvent` instead. See [WebKit bug #103423](https://bugs.webkit.org/show_bug.cgi?id=103423)." }, { "description":"In Safari 8, after setting `event.dataTransfer.dropEffect`, the value in the `drop` event is always `'none'`" }, { "description":"In IE9-10, the `draggable` attribute could be effectively applied for `a` and `img` elements. For `div` and `span` elements you should call `element.dragDrop()` to start drag event." }, { "description":"In IE9-11, using `\"text/plain\"` as the format for `event.dataTransfer.setData` and `event.dataTransfer.getData` reportedly does not work and causes a JS error. The format needs to be `\"text\"`, which seems to work in all the mainstream browsers (Chrome, Safari, Firefox, IE9-11, Edge)." } ], "categories":[ "HTML5" ], "stats":{ "ie":{ "5.5":"a #1 #3", "6":"a #1 #3", "7":"a #1 #3", "8":"a #1 #3", "9":"a #1 #3", "10":"a #2 #3", "11":"a #2 #3" }, "edge":{ "12":"a #2", "13":"a #2", "14":"a #2", "15":"a #2", "16":"a #2", "17":"a #2", "18":"y", "79":"y", "80":"y", "81":"y", "83":"y", "84":"y" }, "firefox":{ "2":"p", "3":"p", "3.5":"y", "3.6":"y", "4":"y", "5":"y", "6":"y", "7":"y", "8":"y", "9":"y", "10":"y", "11":"y", "12":"y", "13":"y", "14":"y", "15":"y", "16":"y", "17":"y", "18":"y", "19":"y", "20":"y", "21":"y", "22":"y", "23":"y", "24":"y", "25":"y", "26":"y", "27":"y", "28":"y", "29":"y", "30":"y", "31":"y", "32":"y", "33":"y", "34":"y", "35":"y", "36":"y", "37":"y", "38":"y", "39":"y", "40":"y", "41":"y", "42":"y", "43":"y", "44":"y", "45":"y", "46":"y", "47":"y", "48":"y", "49":"y", "50":"y", "51":"y", "52":"y", "53":"y", "54":"y", "55":"y", "56":"y", "57":"y", "58":"y", "59":"y", "60":"y", "61":"y", "62":"y", "63":"y", "64":"y", "65":"y", "66":"y", "67":"y", "68":"y", "69":"y", "70":"y", "71":"y", "72":"y", "73":"y", "74":"y", "75":"y", "76":"y", "77":"y", "78":"y", "79":"y", "80":"y", "81":"y", "82":"y" }, "chrome":{ "4":"y", "5":"y", "6":"y", "7":"y", "8":"y", "9":"y", "10":"y", "11":"y", "12":"y", "13":"y", "14":"y", "15":"y", "16":"y", "17":"y", "18":"y", "19":"y", "20":"y", "21":"y", "22":"y", "23":"y", "24":"y", "25":"y", "26":"y", "27":"y", "28":"y", "29":"y", "30":"y", "31":"y", "32":"y", "33":"y", "34":"y", "35":"y", "36":"y", "37":"y", "38":"y", "39":"y", "40":"y", "41":"y", "42":"y", "43":"y", "44":"y", "45":"y", "46":"y", "47":"y", "48":"y", "49":"y", "50":"y", "51":"y", "52":"y", "53":"y", "54":"y", "55":"y", "56":"y", "57":"y", "58":"y", "59":"y", "60":"y", "61":"y", "62":"y", "63":"y", "64":"y", "65":"y", "66":"y", "67":"y", "68":"y", "69":"y", "70":"y", "71":"y", "72":"y", "73":"y", "74":"y", "75":"y", "76":"y", "77":"y", "78":"y", "79":"y", "80":"y", "81":"y", "83":"y", "84":"y", "85":"y", "86":"y", "87":"y", "88":"y" }, "safari":{ "3.1":"y", "3.2":"y", "4":"y", "5":"y", "5.1":"y", "6":"y", "6.1":"y", "7":"y", "7.1":"y", "8":"y", "9":"y", "9.1":"y", "10":"y", "10.1":"y", "11":"y", "11.1":"y", "12":"y", "12.1":"y", "13":"y", "13.1":"y", "14":"y", "TP":"y" }, "opera":{ "9":"p", "9.5-9.6":"p", "10.0-10.1":"p", "10.5":"p", "10.6":"p", "11":"p", "11.1":"p", "11.5":"p", "11.6":"p", "12":"y", "12.1":"y", "15":"y", "16":"y", "17":"y", "18":"y", "19":"y", "20":"y", "21":"y", "22":"y", "23":"y", "24":"y", "25":"y", "26":"y", "27":"y", "28":"y", "29":"y", "30":"y", "31":"y", "32":"y", "33":"y", "34":"y", "35":"y", "36":"y", "37":"y", "38":"y", "39":"y", "40":"y", "41":"y", "42":"y", "43":"y", "44":"y", "45":"y", "46":"y", "47":"y", "48":"y", "49":"y", "50":"y", "51":"y", "52":"y", "53":"y", "54":"y", "55":"y", "56":"y", "57":"y", "58":"y", "60":"y", "62":"y", "63":"y", "64":"y", "65":"y", "66":"y", "67":"y", "68":"y", "69":"y", "70":"y" }, "ios_saf":{ "3.2":"n", "4.0-4.1":"n", "4.2-4.3":"n", "5.0-5.1":"n", "6.0-6.1":"n", "7.0-7.1":"n", "8":"n", "8.1-8.4":"n", "9.0-9.2":"n", "9.3":"n", "10.0-10.2":"n", "10.3":"n", "11.0-11.2":"n", "11.3-11.4":"n", "12.0-12.1":"n", "12.2-12.4":"n", "13.0-13.1":"n", "13.2":"n", "13.3":"n", "13.4-13.5":"n", "14.0":"n" }, "op_mini":{ "all":"n" }, "android":{ "2.1":"n", "2.2":"n", "2.3":"n", "3":"n", "4":"n", "4.1":"n", "4.2-4.3":"n", "4.4":"n", "4.4.3-4.4.4":"n", "81":"y #4" }, "bb":{ "7":"n", "10":"n" }, "op_mob":{ "10":"p", "11":"p", "11.1":"p", "11.5":"p", "12":"p", "12.1":"y", "46":"y #4" }, "and_chr":{ "84":"y #4" }, "and_ff":{ "79":"n" }, "ie_mob":{ "10":"y", "11":"y" }, "and_uc":{ "12.12":"n" }, "samsung":{ "4":"n", "5.0-5.4":"n", "6.2-6.4":"n", "7.2-7.4":"n", "8.2":"n", "9.2":"n", "10.1":"n", "11.1-11.2":"n", "12.0":"n" }, "and_qq":{ "10.4":"y" }, "baidu":{ "7.12":"n" }, "kaios":{ "2.5":"n" } }, "notes":"`dataTransfer.items` only supported by Chrome.\r\n\r\nCurrently no browser supports the `dropzone` attribute.\r\n\r\nFirefox supports any kind of DOM elements for `.setDragImage`. Chrome must have either an `HTMLImageElement` or any kind of DOM Element attached to the DOM _and within the viewport_ of the browser for `.setDragImage`.", "notes_by_num":{ "1":"Partial support refers to no support for the `dataTransfer.files` or `.types` objects", "2":"Partial support refers to not supporting `.setDragImage`", "3":"Partial support refers to limited supported formats for `dataTransfer.setData`/`getData`.", "4":"Not supported in Chromium browsers on Android 6 or older." }, "usage_perc_y":78.8, "usage_perc_a":1.69, "ucprefix":false, "parent":"", "keywords":"draganddrop, draggable", "ie_id":"", "chrome_id":"", "firefox_id":"", "webkit_id":"", "shown":true }