1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- const handlers = {
- onDropFile: () => {},
- };
- export function setup(options) {
- const html = `
- <style>
- .dragInfo {
- position: fixed;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- background: rgba(0, 0, 0, .9);
- display: flex;
- align-items: center;
- justify-content: center;
- }
- .dragInfo>div {
- padding: 1em;
- background: blue;
- color: white;
- pointer-events: none;
- }
- .dragerror div {
- background: red !important;
- font-weight: bold;
- color: white;
- }
- </style>
- <div class="dragInfo" style="display: none;">
- <div>
- ${options.msg}
- </div>
- </div>
- `;
- const elem = document.createElement('div');
- elem.innerHTML = html;
- document.body.appendChild(elem);
- const dragInfo = document.querySelector('.dragInfo');
- function showDragInfo(show) {
- dragInfo.style.display = show ? '' : 'none';
- }
- document.body.addEventListener('dragenter', () => {
- showDragInfo(true);
- });
- const dragElem = dragInfo;
- dragElem.addEventListener('dragover', (e) => {
- e.preventDefault();
- return false;
- });
- dragElem.addEventListener('dragleave', () => {
- showDragInfo(false);
- return false;
- });
- dragElem.addEventListener('dragend', () => {
- showDragInfo(false);
- return false;
- });
- dragElem.addEventListener('drop', (e) => {
- e.preventDefault();
- showDragInfo(false);
- if (e.dataTransfer.items) {
- let fileNdx = 0;
- for (let i = 0; i < e.dataTransfer.items.length; ++i) {
- const item = e.dataTransfer.items[i];
- if (item.kind === 'file') {
- handlers.onDropFile(item.getAsFile(), fileNdx++);
- }
- }
- }
- return false;
- });
- }
- export function onDropFile(fn) {
- handlers.onDropFile = fn;
- }
|