VUE拖拽进入子元素触发dragleave事件(通过防抖进行处理)
·
问题:今天做了个文件拖拽上传的页面,文件拖入的时候拖拽区域变色,离开时拖拽区颜色变回原色,本来用dragleave来做,但是拖拽过程中进入子元素会触发dragleave导致拖拽区颜色闪动。
解决方法:在拖拽进入时,dragover会一直触发,进入子元素和出来子元素也会一直触发,没有区别,于是这里用dragover+防抖实现了dragleave的功能,但是这里有加了微量的延时,可以酌情处理。
以下是实现代码:
看之前得先了解文件拖拽,不懂的可以移步这位老哥的教程,非常详细,非常感谢:Vue实现带进度条的文件拖动上传_切糕的技术博客-CSDN博客_vue上传文件进度条
mounted() {
var tranlatePath = document.getElementById("tranlate-path");
tranlatePath.addEventListener("dragenter", this.onDrag, false);
tranlatePath.addEventListener("dragover", this.onDrag, false);
tranlatePath.addEventListener("drop", this.onDrop, false);
},
methods: {
uploadFile: function (file) {
console.log(file);
},
onDrag: function (e) {
this.ifDrop = true;
// 防抖(在拖拽区域时由于dragover会不停触发,导致防抖启动,不会执行,只有在拖拽离开后dragover停止100ms后执行代码块)
if (this.timeout !== null) {
clearTimeout(this.timeout);
}
this.timeout = setTimeout(() => {
this.ifDrop = false;
this.timeout = null;
console.log(this.ifDrop);
}, 100);
e.stopPropagation();
e.preventDefault();
},
onDrop: function (e) {
e.stopPropagation();
e.preventDefault();
var dt = e.dataTransfer;
for (var i = 0; i !== dt.files.length; i++) {
this.uploadFile(dt.files[i]);
}
},
},更多推荐



所有评论(0)