基于vue实现拖拽上传

html部分


JS部分

export default {
    data() {
        return {
            borderhover:false,
        }
    },
    methods:{
        dragenter(e){
            this.borderhover = true
            this.preventDefault(e)
        },
        dragleave(e){
            this.borderhover = false
            this.preventDefault(e)
        },
        dragover(e){
            this.borderhover = true
            this.preventDefault(e)
        },
        enentDrop(e){
            this.borderhover = false
            this.preventDefault(e)
            let fileData = e.dataTransfer.files;
            console.log(fileData);
            this.uploadFile(fileData)
        },
        preventDefault(e){
            e.stopPropagation();
            e.preventDefault();  //必填字段
        },
        uploadFile(file){
            let datas = new FormData();
            datas.append("file", file);
            console.log(file,'上传的文件,之后调用接口进行上传,入参的file为:'+datas,'文件类型为:'+file[0].type)
        }
    },
    mounted(){
        // 1.文件第一次进入拖动区时,触发 dragenter 事件
        // 2.文件在拖动区来回拖拽时,不断触发 dragover 事件
        // 3.文件已经在拖动区,并松开鼠标时,触发 drop 事件
        // 4.文件在拖动区来回拖拽时,不断触发dragleave 事件 
        var dropbox = document.getElementById('draggle-area');
        dropbox.addEventListener("drop",this.enentDrop,false)
        dropbox.addEventListener("dragleave",this.dragleave,false)
        dropbox.addEventListener("dragenter",this.dragenter,false)
        dropbox.addEventListener("dragover",this.dragover,false)
    }
}

样式自行脑补

简单的样式

打印如下控制台打印

实现的大体思路简单,主要就是监听了拖拽事件以及在拖拽的时候阻止浏览器的默认下载文件行为。在调取后端接口时传入datas参数。介于我的项目是需要上传word文件,只需通过判断type做拦截即可!

你可能感兴趣的:(javascript,vue.js,前端)