Вы можете прослушивать события dragenter
и dragleave
, чтобы справиться с этим. Но это может быть сложно, если у вас есть другие элементы в вашем элементе удаления, потому что они будут вызывать dragleave
события в вашей цели удаления, которые вы захотите игнорировать. Но что-то вроде этого должно работать:
<div :class="['downbox', drag_over ? 'over' : '']"
@dragenter="dragEnter"
@dragleave="dragLeave"
@dragover.prevent
@drop.prevent="addFile"
>
<div ref="others">
<span style="font-size: 60px"><font-awesome-icon icon='cloud-upload-alt'/></span>
<br>
Click to Browse
<br>
or Drag and Drop a File Here
</div>
</div>
В ваших обработчиках событий используйте over_others
, чтобы решить, следует ли устанавливать drag_over
на false
, что вы не хотите делать, если вы все еще перетаскивая на дочерний элемент. (см. также, информация о Vue $ refs )
У вас могут быть трудности с диапазоном в 60 пикселей и значком font-awesome-icon, но вы можете расширить его принцип этих элементов, если они доставляют вам неприятности.
data() {
return {
drag_over: false, // dragging over the target OR any child element
over_others: false, // dragging over a child element
}
},
methods: {
dragEnter(e) {
if(e.target === this.$refs.others) this.over_others = true
else this.drag_over = true
},
dragLeave(e) {
if(e.target === this.$refs.others) this.over_others = false
else if(!this.over_others) this.drag_over = false
},
// ...
}
И добавьте класс css:
.downbox:hover,
.downbox.over {
background-color: #c56bc5;
}