2016-10-13 00:16:48 点击量:17 标签: 收藏本文
FileList对象和File对象
在HTML5中对file控件添加了multiple属性,允许一次放置多个文件,使用FileList来表示文件列表对象,File对象表示每一个文件。File对象有name、lastModifiedDate、size和type属性。
另外,HTML5中对file控件还添加了accept属性,企图让file控件只能接受某种类型的文件,但目前浏览器只局限于文件选择框的操作。
Blob对象
Blob表示二进制原始数据,据说它提供了一个slice方法,可以通过该方法访问到字节内部的原始数据块,但没见过如何用。事实上File对象也继承了Blob对象。Blob对象有两个属性:size和type,具体示例请参考上文。
FileReader接口
FileReader接口主要用来把文件读入内存,并且读取文件中的数据。FileReader接口有4个方法,其中3个用来读取文件,另一个用来中断读取,这些都是异步的,无论读取成功或失败,方法并不会返回读取结果,这一结果存储在result属性中。
| 法名 | 参数 | 描述 |
|---|---|---|
| readAsBinaryString | file | 将文件读取为二进制编码 |
| readAsText | file,[encoding] | 将文件读取为文本 |
| readAsDataURL | file | 将文件读取为DataURL |
| abort | (none) | 终端读取操作 |
FileReader 包含了一套完整的事件模型,用于捕获读取文件时的状态,下面这个表格归纳了这些事件。
| 事件 | 描述 |
|---|---|
| readAsBinaryString | file |
| onabort | 中断时触发 |
| onerror | 出错时触发 |
| onload | 文件读取成功完成时触发 |
| onloadend | 读取完成触发,无论成功或失败 |
| onloadstart | 读取开始时触发 |
| onprogress | 读取中 |
- <form action="" method="post" enctype="multipart/form-data">
- <input type="file" name="file" id="file">
- <input type="button" name="button" id="button" onClick="doit()" value="按钮">
- </form>
- <script type="text/javascript">
- function doit(){
- var file=document.getElementById("file");
- if(file.files.length!=0){
- var reader=new FileReader();
- reader.readAsText(file.files[0],"GB2312");
- reader.onload=function(f){
- alert(this.result);
- }
- }
- return false;
- }
- </script>
拖放API
HTML5中大大简化了拖放的操作,实现拖放只需要两步:
- <p>请把图片或div拖放到矩形中:</p>
- <div ondrop="drop(event)" ondragover="allowDrop(event)" style="border:1px solid #ccc;width:500px;height:200px;"></div>
- <br />
- <img id="dragedimg" src="0.jpg" ondragstart="drag(event)" />
- <div id="drageddiv" draggable="true" ondragstart="drag(event)" style="border:1px solid #F00">被拖放的div</div>
- <script type="text/javascript">
- function allowDrop(ev){
- ev.preventDefault();
- }
- function drag(ev){
- ev.dataTransfer.setData("Text",ev.target.id);
- }
- function drop(ev){
- ev.preventDefault();
- var data=ev.dataTransfer.getData("Text");
- ev.target.appendChild(document.getElementById(data));
- }
- </script>
如上示例,实现拖放的步骤:
拖放的相关事件
| 事件 | 产生事件的元素 | 描述 |
| dragstart | 被拖放的元素。 | 开始拖放操作。 |
| drag | 被拖放的元素。 | 拖放过程中。 |
| dragenter | 拖放过程中鼠标经过的元素。 | 被拖放的元素开始进入本元素的范围内。 |
| dragover | 拖放过程中鼠标经过的元素。 | 被拖放的元素正在本元素范围内移动。 |
| dragleave | 拖放过程中鼠标经过的元素。 | 被拖放的元素离开本元素的范围。 |
| drop | 拖放的目标元素。 | 有其他元素被拖放到了本元素中。 |
| dragend | 拖放的目标元素。 | 拖放操作结束。 |
DataTransfer对象的属性与方法
如果DataTransfer对象的属性和方法使用得好,可以实现定制拖放图标,让它只支持特定拖放(例如复制、移动等),甚至可以实现更复杂的拖放操作:
setData()方法在拖放开始时向dataTransfer对象中存入数据,它用type属性来指定数据MIME类型,而getData()方法在拖 动结束时读取dataTransfer对象中的数据。clearData()方法可以用来清除DataTransfer对象内的数据。
设定拖放时的视觉效果
dropEffect属性与effectAllowed属性结合起来可以设定拖放时的视觉效果。effectAllowed属性表示当一个元素被拖动时所 允许的视觉效果,一般在ondragstart事件中设定,允许设定的值为none、copy、copyLink、copyMove、link、 linkMove、move、all、unintialize。dropEffect属性表示实际拖放时的视觉效果,一般在ondragover事件中指 定,允许设定的值为none、copy、link、move。dropEffect属性所表示的实际视觉效果必须在effectAllowed属性所表示 的允许的视觉效果范围内。规则如下所示:
我们是一家提供综合软件外包与弱电工程服务的技术公司。
业务涵盖定制软件、管理系统、网站、小程序、APP、系统集成、网络布线、监控安防、门禁、机房建设及长期技术维护。
公司地址:湖北省宜昌市伍家岗区东站二路6号三峡(宜昌)大数据产业园海洋馆二楼A203室