반응형
파일에 대해 DragEnd 이벤트가 발생하지 않음
내 템플릿:
<div class="upload-component" @dragend="log('end')" @dragenter="dragEntered" @drop.prevent @dragover.prevent>
<div class="zone" @drop="dropped">
</div>
<p draggable="true">drag me</p>
</div>
내 js:
export default {
name: 'UploadComponent',
methods: {
log(str){
console.log(str)
},
dragEntered(e){
// change some styles
},
dropped(e){
console.log(e.dataTransfer.files)
}
}
}
문제:
P 요소를 끌어다 놓거나 이스케이프를 누르면 "끝"으로 기록됩니다.데스크톱에서 파일을 가져와 바탕화면에 다시 놓거나 이스케이프 또는 드롭을 누르면dragend
이벤트는 발화하지 않고 아무것도 기록하지 않습니다.
나는 아마 몇 년 늦었지만 아마 다른 누군가가 이것을 유용하게 여길 것이다.
드래그 스타트 및 드래그 엔드 이벤트는 OS에서 브라우저로 파일을 드래그할 때 실행되지 않습니다.
따라서 드래그 엔드 이벤트는 작동하지 않지만 다른 해결 방법이 있습니다. 드래그 오버 이벤트는 빠르게 실행되므로 오버레이가 다음과 같이 1초 동안 작동을 멈추면 오버레이를 지우기 위한 타임아웃을 설정할 수 있습니다.
<template>
<div class="advice-documents">
<div
v-if="isDragOverlayVisible"
class="advice-documents__drop-zone"
>
<span>drop file to upload</span>
</div>
</div>
</template>
<script>
export default {
data: () => ({
isDragOverlayVisible: false,
dragOverTimeout: undefined,
}),
created() {
document.addEventListener('dragover', this.handleDragover)
document.addEventListener('drop', this.handleDrop)
},
beforeDestroy() {
document.removeEventListener('dragover', this.handleDragover)
document.removeEventListener('drop', this.handleDrop)
},
methods: {
handleDrop(event) {
event.preventDefault()
this.isDragOverlayVisible = false
},
handleDragover(event) {
event.preventDefault()
this.isDragOverlayVisible = true
console.log('dragover')
clearTimeout(this.dragOverTimeout)
this.dragOverTimeout = setTimeout(() => {
this.isDragOverlayVisible = false
}, 1000)
},
},
}
</script>
<style>
.advice-documents__drop-zone {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.7);
color: var(--aab-light-green);
display: flex;
align-items: center;
justify-content: center;
font-size: 8vmin;
z-index: 1;
}
</style>
언급URL : https://stackoverflow.com/questions/45321675/dragend-event-not-fired-for-files
반응형
'programing' 카테고리의 다른 글
Vuex에서 다른 액션 내에서 액션을 호출하는 것은 잘못된 관행입니까? (0) | 2022.06.27 |
---|---|
디스패치 수신이 값으로 정의되지 않았습니다. (0) | 2022.06.27 |
Bootstrap-vue 모달 3회 오픈 (0) | 2022.06.27 |
Java에서는 선행 0을 유지하면서 바이트 배열을 16진수 문자열로 변환하려면 어떻게 해야 합니까? (0) | 2022.06.27 |
Vue.js를 사용한 계산 상태 및 변환 상태 문제 (0) | 2022.06.27 |