diff --git a/src/hooks/useDropImage.ts b/src/hooks/useDropImage.ts new file mode 100644 index 00000000..a838f48f --- /dev/null +++ b/src/hooks/useDropImage.ts @@ -0,0 +1,33 @@ +import { ref, onMounted, onUnmounted, Ref } from 'vue' + +export default (elementRef: Ref) => { + const imageFile = ref(null) + + const handleDrop = (e: DragEvent) => { + if(!e.dataTransfer) return + const file = e.dataTransfer.items[0] + if( file.kind === 'file' && file.type.indexOf('image') !== -1 ) { + const _imageFile = file.getAsFile() + if(_imageFile) imageFile.value = _imageFile + } + } + + onMounted(() => { + elementRef.value && elementRef.value.addEventListener('drop', handleDrop) + + document.ondragleave = e => e.preventDefault() + document.ondrop = e => e.preventDefault() + document.ondragenter = e => e.preventDefault() + document.ondragover = e => e.preventDefault() + }) + onUnmounted(() => { + elementRef.value && elementRef.value.removeEventListener('drop', handleDrop) + + document.ondragleave = null + document.ondrop = null + document.ondragenter = null + document.ondragover = null + }) + + return imageFile +} \ No newline at end of file diff --git a/src/views/Editor/Canvas/index.vue b/src/views/Editor/Canvas/index.vue index 0fcc796e..bdb6afde 100644 --- a/src/views/Editor/Canvas/index.vue +++ b/src/views/Editor/Canvas/index.vue @@ -40,13 +40,15 @@