最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

如何实现文件拖拽上传

来源:动视网 责编:小采 时间:2020-11-27 20:11:56
文档

如何实现文件拖拽上传

如何实现文件拖拽上传:拖拽选择文件屏蔽默认事件刚开始的时候,是在网上找了一个例子,这个例子中提到,需要在document上屏蔽和drag相关的所有事件的默认处理方式,代码如下:$(document).on({ dragleave:function(e){ //拖离 e.preventDefault(); }, dr
推荐度:
导读如何实现文件拖拽上传:拖拽选择文件屏蔽默认事件刚开始的时候,是在网上找了一个例子,这个例子中提到,需要在document上屏蔽和drag相关的所有事件的默认处理方式,代码如下:$(document).on({ dragleave:function(e){ //拖离 e.preventDefault(); }, dr


拖拽选择文件

屏蔽默认事件

刚开始的时候,是在网上找了一个例子,这个例子中提到,需要在document上屏蔽和drag相关的所有事件的默认处理方式,代码如下:

$(document).on({ 
 dragleave:function(e){ //拖离 
 e.preventDefault(); 
 }, 
 drop:function(e){ //拖后放 
 e.preventDefault(); 
 }, 
 dragenter:function(e){ //拖进 
 e.preventDefault(); 
 }, 
 dragover:function(e){ //拖来拖去 
 e.preventDefault(); 
 } 
 });

实际上,在我们的文件上传中,接受拖拽的区域一般只有一个小区域,所以我对其做了如下的精简

$drop.on("dragenter", function (e) {
 e.preventDefault();
 console.log("enter");
 $drop.addClass("hover");});$drop.on("dragleave drop", function (e) {
 e.preventDefault();
 console.log("leave");
 $drop.removeClass("hover");});$drop.on("dragover", function (e) {
 e.preventDefault();})

并且,在enter事件的时候,给目标区域增加了一个hover的样式,让接受区域高亮

默认情况下是酱紫的,(所以在drop 和leave事件中要去掉这个样式)

对来源不同的文件进行处理

因为要同时处理input框和拖拽区域,所以我的html结构如下:

 <p class="row" id="dropBox" @drop.prevent="Change($event)">
 <p class="import-data">
 <button 
 :class="{'disabled' : resultMsg.length > 0}" class="btn btn-info">
 <i class="fa fa-cloud-upload text"></i>
 选择文件 
 </button>
 <span :class="{'error-tips':isError}">{{msg}}</span>
 <input 
 type="file" 
 v-show="resultMsg.length == 0" 
 @change="Change($event)" 
 name="importExcel" 
 class="importExcel" 
 value="" />
 </p>
 <br>
 <p class="loading" :style="'width:'+loading+'%'"></p>
 </p>

#dropBox 的drop事件和input的change事件同时绑定Change函数并将event对象传入函数中
这里,我在drop事件上加入了prevent修饰符来屏蔽默认事件,如果不屏蔽事件,接受区域#dropBox 是无法接收到文件,并且文件会触发浏览器的下载(如果不能直接预览的话)或者预览;

 Change:function(ev){
 var e = window.event || ev; 
 var file = e.target.files ? e.target.files[0] : e.dataTransfer.files[0];
 if(!file){
 vm.msg = "点击选择,或者拖拽填写好数据的excel文件致此";
 vm.isError = true;
 return false
 } 
 },

ps:隐去了js代码中的业务逻辑只讲述公共部分,

在接受用户选择的文件时,用e.target.files作为判断条件,来判断是否有input选择的文件,如果是则取 e.target.files[0] ,如果不是 则取 e.dataTransfer.files[0]
这两个事件对象的属性是浏览器根据不同的情况挂在事件对象上的。

文档

如何实现文件拖拽上传

如何实现文件拖拽上传:拖拽选择文件屏蔽默认事件刚开始的时候,是在网上找了一个例子,这个例子中提到,需要在document上屏蔽和drag相关的所有事件的默认处理方式,代码如下:$(document).on({ dragleave:function(e){ //拖离 e.preventDefault(); }, dr
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top