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 以二进制字符串的方式读取 (多用于上传数据)
H5新特性之拖拽文件的更多相关文章
- H5新特性汇总
H5新特性: 新增选择器 document.querySelector.document.querySelectorAll 拖拽释放(Drag and drop) API 媒体播放的 video 和 ...
- 解决Duilib集成CEF浏览器在Win10无法向客户区拖拽文件
在Duilib中集成CEF浏览器项目实际开发中,遇到一个问题. 一个需求从资源管理器(桌面)拖拽文件到客户端,窗口捕获WM_DROPFILES消息然后进行消息处理,但客户区是集成的CEF浏览器,浏览器 ...
- window响应拖拽文件操作
window响应拖拽文件操作 1.首先调用DragAcceptFiles,让控件或者窗体支持文件拖动操作函数功能:用来为拖放文件作初始化.函数原型: void DragAcceptFiles( HWN ...
- H5新特性--WebStorage--WebSocke
今天的目标 3.2:h5新特性--WebStorage localStorage 在客户端浏览器保存数据 永久保存 保存数据 localStorage [key] = value 保存数据 loca ...
- H5新特性---Web Worker---Web Stroage
今天的目标 3.1:h5新特性八--Web Worker---代码就3行 程序:program 存储在外存(磁盘)中代码 进程:Process/Task 将程序调用内存中,分配空间 线程:Thread ...
- H5新特性---SVG--椭圆--直线--文本--滤镜(高斯滤镜--模糊)--地理定位
今天的目标 3.1:h5新特性--SVG--椭圆 <ellipse rx="" ry="" cx="" cy="" ...
- H5新特性——--第三方绘图工具库 echarts(canvas)---SVG绘图
今天学习的内容 3.1:h5新特性---第三方绘图工具库 echarts(canvas) 百度 echarts;d3;two.js;.... 3.2:h5新特性---SVG绘图 3.2:h5新特性-- ...
- H5新特性-视频,音频-Flash-canvas绘图
json格式 json - > AJAX json:数据格式,通常是以字符串形式表示 对象 {"name":"james","age" ...
- Unity输出PC端(Windows) 拖拽文件到app中
需求:给策划们写一个PC端(Window)的Excel导表工具.本来用OpenFile打开FileExplorerDialog后让他们自己选择想要添加的Excel文件就行了,结果有个需求是希望能拖拽E ...
随机推荐
- GIthub地址
https://github.com/cuibaoxue/Text1
- 探索guava(一)——前置条件Preconditions类
作用 可以简洁的完成参数检验,在进行业务逻辑代码前进行前置判断.并且避免了冗长的if语句.guava将所有检验的API都放置于Preconditions类中. API Preconditions类大致 ...
- 第八章Jdk代理 cglib代理
什么是代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 这 ...
- JavaScript使用jsonp实现跨域
为什么要把ajax跨域写一下呢,因为ajax跨域并不是想跨就能跨的.因为为了安全,ajax是不允许跨域的. 举个例子,你有一个卖水果的网站,你的ajax请求另一个网站提供的图片,正常的时候,图片是一个 ...
- PAT (Basic Level) Practice 1001 害死人不偿命的(3n+1)猜想
https://pintia.cn/problem-sets/994805260223102976/problems/994805325918486528 卡拉兹(Callatz)猜想: 对任何一个自 ...
- 面象对象设计原则之三:里氏替换原则(The Liskov Substitution Principle,LSP)
里氏代换原则由2008年图灵奖得主.美国第一位计算机科学女博士Barbara Liskov教授和卡内基·梅隆大学Jeannette Wing教授于1994年提出.其严格表述如下:如果对每一个类型为S的 ...
- Oracle PLSQL 客户端 连接Oracle12.2 出现权限问题的解决办法以及绿色版Oracle客户端的使用.
1. 同事反馈登录最新的oracle12.2 的数据库时登录不上报错: 2. 记得当时查过资料, Oracle 在12.2 增加了客户端连接数据库的加密级别 比较早的oracle客户端比如11.2.0 ...
- 日常工作中 Oracle12c参数的处理:
1. Oracle12c 修改过的参数 alter system set result_cache_mode=manual; alter system ; alter system set " ...
- Jquery 组 tbale表格筛选
<!DOCTYPE html><html lang="zh-cn"><head> <meta charset="utf-8&qu ...
- 微软开放 6 万项 Linux 专利,有哪些是我们该注意的?
导读 上周,微软宣布正式加入 Open Invention Network (“OIN”) 社区,开放其 6 万多项 Linux 专利.消息一出,许多人疑惑微软为什么要这么做?作为普通开发者,是否能使 ...