drag-and-drop.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. 'use strict';
  2. (function(){
  3. const handlers = {
  4. onDropFile: () => {},
  5. };
  6. function setup(options) {
  7. const html = `
  8. <style>
  9. .dragInfo {
  10. position: fixed;
  11. left: 0;
  12. top: 0;
  13. width: 100%;
  14. height: 100%;
  15. background: rgba(0, 0, 0, .9);
  16. display: flex;
  17. align-items: center;
  18. justify-content: center;
  19. }
  20. .dragInfo>div {
  21. padding: 1em;
  22. background: blue;
  23. color: white;
  24. pointer-events: none;
  25. }
  26. .dragerror div {
  27. background: red !important;
  28. font-weight: bold;
  29. color: white;
  30. }
  31. </style>
  32. <div class="dragInfo" style="display: none;">
  33. <div>
  34. ${options.msg}
  35. </div>
  36. </div>
  37. `;
  38. const elem = document.createElement('div');
  39. elem.innerHTML = html;
  40. document.body.appendChild(elem);
  41. const dragInfo = document.querySelector('.dragInfo');
  42. function showDragInfo(show) {
  43. dragInfo.style.display = show ? '' : 'none';
  44. }
  45. document.body.addEventListener('dragenter', () => {
  46. showDragInfo(true);
  47. });
  48. const dragElem = dragInfo;
  49. dragElem.addEventListener('dragover', (e) => {
  50. e.preventDefault();
  51. return false;
  52. });
  53. dragElem.addEventListener('dragleave', () => {
  54. showDragInfo(false);
  55. return false;
  56. });
  57. dragElem.addEventListener('dragend', () => {
  58. showDragInfo(false);
  59. return false;
  60. });
  61. dragElem.addEventListener('drop', (e) => {
  62. e.preventDefault();
  63. showDragInfo(false);
  64. if (e.dataTransfer.items && e.dataTransfer.items) {
  65. let fileNdx = 0;
  66. for (let i = 0; i < e.dataTransfer.items.length; ++i) {
  67. const item = e.dataTransfer.items[i];
  68. if (item.kind === 'file') {
  69. handlers.onDropFile(item.getAsFile(), fileNdx++);
  70. }
  71. }
  72. }
  73. return false;
  74. });
  75. }
  76. function onDropFile(fn) {
  77. handlers.onDropFile = fn;
  78. }
  79. window.dragAndDrop = {
  80. setup,
  81. onDropFile,
  82. };
  83. }());