# simple-dropzone [](https://www.npmjs.com/package/simple-dropzone) [](https://bundlephobia.com/result?p=simple-dropzone) [](https://github.com/donmccurdy/simple-dropzone/blob/master/LICENSE) [](https://github.com/donmccurdy/simple-dropzone/actions?query=workflow%3ACI) A simple drag-and-drop input using vanilla JavaScript. The library supports supports selection of multiple files, ZIP decoding, and fallback to `` on older browsers. ## Installation ``` npm install --save simple-dropzone ``` ## Usage Create DOM elements for the dropzone and a file input (for compatibility with older browsers). Both may be styled in CSS however you choose. ```html
``` Create a `SimpleDropzone` controller. When files are added, by drag-and-drop or selection with the input, a `drop` event is emitted. This event contains a map of filenames to HTML5 [File](https://developer.mozilla.org/en-US/docs/Web/API/File) objects. The file list is flat, although directory structure is shown in the filenames. ```js dropzone.on('drop', ({files}) => { console.log(files); }); ``` Optionally, you may want to set [additional attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#additional_attributes) to configure the file input element, e.g. to allow selection of multiple files. ## API ### SimpleDropzone( `dropEl`, `inputEl` ) Constructor takes two DOM elements, for the dropzone and file input. ```js const dropEl = document.querySelector('#dropzone'); const inputEl = document.querySelector('#input'); const dropCtrl = new SimpleDropzone(dropEl, inputEl); ``` ```html ``` ### .on( `event`, `callback` ) : `this` Listens for `event` and invokes the callback. ```js dropCtrl.on('drop', ({files}) => { console.log(files); }); ``` ### .destroy() Destroys the instance and unbinds all events. ## Events | Event | Properties | Description | |---|---|---| | `drop` | `files : Map