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新特性之拖拽文件的更多相关文章

  1. H5新特性汇总

    H5新特性: 新增选择器 document.querySelector.document.querySelectorAll 拖拽释放(Drag and drop) API 媒体播放的 video 和 ...

  2. 解决Duilib集成CEF浏览器在Win10无法向客户区拖拽文件

    在Duilib中集成CEF浏览器项目实际开发中,遇到一个问题. 一个需求从资源管理器(桌面)拖拽文件到客户端,窗口捕获WM_DROPFILES消息然后进行消息处理,但客户区是集成的CEF浏览器,浏览器 ...

  3. window响应拖拽文件操作

    window响应拖拽文件操作 1.首先调用DragAcceptFiles,让控件或者窗体支持文件拖动操作函数功能:用来为拖放文件作初始化.函数原型: void DragAcceptFiles( HWN ...

  4. H5新特性--WebStorage--WebSocke

    今天的目标 3.2:h5新特性--WebStorage localStorage  在客户端浏览器保存数据 永久保存 保存数据 localStorage [key] = value 保存数据 loca ...

  5. H5新特性---Web Worker---Web Stroage

    今天的目标 3.1:h5新特性八--Web Worker---代码就3行 程序:program 存储在外存(磁盘)中代码 进程:Process/Task 将程序调用内存中,分配空间 线程:Thread ...

  6. H5新特性---SVG--椭圆--直线--文本--滤镜(高斯滤镜--模糊)--地理定位

    今天的目标 3.1:h5新特性--SVG--椭圆 <ellipse rx="" ry=""  cx="" cy="" ...

  7. H5新特性——--第三方绘图工具库 echarts(canvas)---SVG绘图

    今天学习的内容 3.1:h5新特性---第三方绘图工具库 echarts(canvas) 百度 echarts;d3;two.js;.... 3.2:h5新特性---SVG绘图 3.2:h5新特性-- ...

  8. H5新特性-视频,音频-Flash-canvas绘图

    json格式 json - > AJAX json:数据格式,通常是以字符串形式表示 对象 {"name":"james","age" ...

  9. Unity输出PC端(Windows) 拖拽文件到app中

    需求:给策划们写一个PC端(Window)的Excel导表工具.本来用OpenFile打开FileExplorerDialog后让他们自己选择想要添加的Excel文件就行了,结果有个需求是希望能拖拽E ...

随机推荐

  1. oracle alter

    ALTER TABLE (表名) ADD CONSTRAINT (索引名);ALTER TABLE (表名) DROP CONSTRAINT (索引名); ALTER TABLE (表名) ADD ( ...

  2. spring播放器详细设计说明书(一)

    1 引言 1.1编写目的 编写目的是详细说明SPRING音乐播放器的设计使用,预期读者对象为在个人电脑上需要使用简单音乐播放器的用户.1.2项目背景  说明: a.待开发软件系统的名称为SPRING音 ...

  3. 小学四则运算APP 第二次冲刺-第二天

    团队成员:陈淑筠.杨家安.陈曦 团队选题:小学四则运算APP 第二次冲刺阶段时间:11.29~12.09 本次发布的判断题功能界面的设置: activity_panduan_set.xml: < ...

  4. iOS GCD中级篇 - dispatch_semaphore(信号量)的理解及使用

    理解这个概念之前,先抛出一个问题 问题描述: 假设现在系统有两个空闲资源可以被利用,但同一时间却有三个线程要进行访问,这种情况下,该如何处理呢? 或者 我们要下载很多图片,并发异步进行,每个下载都会开 ...

  5. java数值运算后精度丢失问题

    最近连续俩次遇到运算后数值精度丢失问题,所以记录一下. 问题1:java计算百分比,应该得到57,可返回的就是56 在java代码中 BigDecimal progress; BigDecimal a ...

  6. Java解析Excel

    前两天总结了些关于Excel和CSV结合TestNG进行数据驱动测试的例子,对于Excel存放TestCase和关键字如何进行解析,也做了对应的总结,希望在学习的路上勇往直前,有不对的地方,希望大家指 ...

  7. Qt__主窗口、菜单和工具条(QMainWindow,QMenu,QToolBar)

    转自豆子空间 主窗口 Qt的GUI程序有一个常用的顶层窗口,叫做MainWindow.MainWindow继承自QMainWindow.QMainWindow窗口分成几个主要的区域: 最上面是Wind ...

  8. as_matrix、保存训练模型

    #-*- coding: utf-8 -*- #构建并测试CART决策树模型 import pandas as pd #导入数据分析库 from random import shuffle #导入随机 ...

  9. __new__ __init__区别

    1 class A(object): 2 def __init__(self,*args, **kwargs): 3 print "init A" 4 def __new__(cl ...

  10. PostgreSQL、SQL Server数据库中的数据类型的映射关系

    PostgreSQL 8.1 轰动发布,我也打算将原来使用 SQL Server 的一些应用迁移到 PostgreSQL 上,首先需要迁移的是表,那么这就必须要先搞清楚这两个数据库中的数据类型的映射关 ...