H5新特性之拖拽文件

H5新增了drag事件,在H5中拖拽是十分常见的。

可以拖拽的分为页面内的和页面外的 

页面内的一般默认可以拖拽的是img和a标签

页面外的常指的是文件

上代码吧~

let zoom = document.getElementById('drag_zoom');
zoom.addEventListener('dragenter',_=>{
  zoom.innerHTML = '释放鼠标~~';
},false)
zoom.addEventListener('dragleave',_=>{
  zoom.innerHTML = '请把文件拖到这里~~';
},false)
zoom.addEventListener('dragover',ev=>{
  ev.preventDefault();
},false)
zoom.addEventListener('drop',ev=>{
  console.log(ev.dataTransfer.files);
  zoom.innerHTML = '请把文件拖到这里~~';
  ev.preventDefault();
},false)

特别的是,dragover和drop都需要把浏览器的默认事件去除,其中一个没有去除都会导致浏览器直接读取该文件,而导致离开本页面

如果拖拽进来的是文件的话,ev.dataTransfer.files可以读取到拖拽进来文件的一些信息。

dataTransfer.files的结构如下:

 

可以看出,我们可以初步获取文件的name、type、size、lastModified这些属性

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

配合FileReader读取文件,用法直接上代码

let fr = new FileReader();
fr.onload = function(){
     console.log(this.result);
}
fr.onerror = function(){
     alert('失败了~~');
}

div.addEventListener('drop',ev=>{
    fr.readAsText(ev.dataTransfer.files[0]);
    fr.readAsDataURL(ev.dataTransfer.files[0]);
    fr.readAsArrayBuffer(ev.dataTransfer.files[0]);
    fr.readAsBinaryString(ev.dataTransfer.files[0]);
},false)

值得注意的是:

1.FileReader读出文件比较特殊的是,回来data的不是onload的回调参数,而是FileReader实例本身的result属性

2.FileReader实例有4种读取文件的方式:

  1) readAsText 以文本方式读取 (多用于读取文本文件)

  2) readAsDataURL 以base64方式读取 (多用于读取图片)

  3) readAsArrayBuffer 以二进制的方式读取(不常用,js难以操作这种数据类型)

  4) readAsBinaryString 以二进制字符串的方式读取 (多用于上传数据)

转载于:https://www.cnblogs.com/amiezhang/p/7875982.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值