HTML5学习之三:文件与拖放

(本内容部分节选自《HTML 5从入门到精通》)

选择文件

————————————————————————————————————————————————————————

在HTML4中,file控件内只允许放置一个文件,但是到了HTML5中,通过添加multiple属性,在file控件内允许一次放置多个文件。控件内的每一个用户选择的文件都是一个file对象,而FileList对象则为这些file对象的列表,代表用户选择的所有文件。File对象有两个属性,name属性表示文件名,不包括路

径,lastModifiedDate属性表示文件的最后修改日期。

得到文件信息:

Blob对象有两个属性,size属性表示一个blob对象的字节长度,type属性表示blob的MIME类型,如果是未知类型,则返回一个空字符串。

文件筛选:

对于图像类型的文件,blob对象的type属性都是以“image/”开头的,后面紧跟这图像的类型,利用此特性我们可以在JavaScript中判断用户选择的文件是否为图像文件,如果在批量上传时,只允许上传图像文件,可以利用该属性,如果用户选择的多个文件中有不是图像的文件时,可以弹出错误提示信息,并停止后面的文件上传,或者跳过这个文件,不将该文件上传。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>文件与拖放</title>
</head>
<script language="javascript">
function ShowName()
{
	var file;
	for(var i=0; i<document.getElementById("file").files.length;i++)
	{
		file=document.getElementById("file").files[i];
		alert(file.name);
	}
}
function ShowFileType()
{
	var file;
	file=document.getElementById("file").files[0];
	var size = document.getElementById("size");
	size.innerHTML = file.size;
	var type = document.getElementById("type");
	type.innerHTML = file.type;
}
function FileFliter()
{
	var file;
	for(var i=0; i<document.getElementById("file").files.length;i++)
	{
		file=document.getElementById("file").files[i];
		if(! /image\/\w/.test(file.type))
		{
			alert(file.name+"不符合图片格式要求!");
			break;
		}
		else
		{
			alert(file.name+"合格");
		}

	}
}
</script>
<body>
<input type="file" id="file" multiple size="20"/>
<input type="button" onClick="ShowName()" value="upload"/>
<p><input type="button" onClick="ShowFileType()" value="file_info"/>
<p>字节长度:<span id="size"></span>
<p>文件类型:<span id="type"></span>
<p><input type="button" value="check" onClick="FileFliter();"/>
<p>选择图片:<input type="file" id="file" accept="images/*"/>
</body>
</html>

选择文件

读取文件

————————————————————————————————————————————————————————

FileReader 的接口拥有 4 个方法,其中 3 个用以读取文件,另一个用来中断读取。下面的表格列出了这些方法以及它们的参数和功能,需要注意的是,无论读取成功或失败,方法并不会返回读取结果,这一结果存储在 result属性中。

对浏览器是否支持该接口+使用第三第四个预览图片和文件的使用方法如下:

  1 <!doctype html>
  2 <html>
  3 <head>
  4 <meta charset="utf-8">
  5 <title>文件与拖放</title>
  6 </head>
  7 <script language="javascript">
  8 function TestScan()
  9 {
 10 	if(typeof FileReader == ‘undefined‘)
 11 	{
 12 		alert("浏览器没有实现FileReader接口! ");
 13 	}
 14 	else
 15 	{
 16 		alert("有此接口!");
 17 	}
 18 }
 19 function readImg()
 20 {
 21 	var file = document.getElementById("file").files[0];
 22 	if(! /image\/\w/.test(file.type))
 23 	{
 24 		alert("图片格式不符!");
 25 		return false;
 26 	}
 27 	var reader=new FileReader();
 28 	reader.readAsDataURL(file);
 29 	reader.onload = function(e)
 30 	{
 31 		var result = document.getElementById("result");
 32 		result.innerHTML = ‘<img src="‘+this.result+‘" alt=""/>‘
 33 	}
 34 }
 35 function readText()
 36 {
 37 	var filee = document.getElementById("filee").files[0];
 38 	var reader=new FileReader();
 39 	reader.readAsText(filee);
 40 	reader.onload = function(e)
 41 	{
 42 		var result2 = document.getElementById("resultt");
 43 		result2.innerHTML = ‘<img src="‘+this.result+‘" alt=""/>‘
 44 	}
 45 }
 46 </script>
 47 <body>
 48 <input type="button" value="检查浏览器" onClick="TestScan();"/>
 49 <!--预览图片-->
 50 <p><label>选择要预览的图片:</label>
 51 <input type="file" id="file"/>&nbsp;
 52 <input type="button" value="读取图像" onClick="readImg()"/>
 53 <div name="result" id="result"></div>
 54 <p><label>选择要预览的文本文件:</label>
 55 <input type="file" id="filee"/>&nbsp;
 56 <input type="button" value="读取文件" onClick="readText()"/>
 57 <div name="result2" id="resultt"></div>
 58 </body>
 59 </html>
 60 

代码

效果图:

可以通过以下代码来了解其执行的步骤:

  1 <!DOCTYPE html><head>
  2 <meta charset="UTF-8">
  3 <title>fileReader对象的事件先后顺序</title>
  4 </head>
  5 <script language="javascript">
  6 var result=document.getElementById("result");
  7 var input=document.getElementById("input");
  8 if(typeof FileReader==‘undefined‘)
  9 {
 10     result.innerHTML = "<p class=‘warn‘>抱歉,你的浏览器不支持 FileReader</p>";
 11     input.setAttribute( ‘disabled‘,‘disabled‘ );
 12 }
 13 function readFile()
 14 {
 15     var file = document.getElementById("file").files[0];
 16     var reader = new FileReader();
 17
 18     reader.onload = function(e)
 19     {
 20         result.innerHTML = ‘<img src="‘+this.result+‘" alt=""/>‘
 21         alert("load");
 22     }
 23     reader.onprogress = function(e)
 24     {
 25         alert("progress");
 26     }
 27     reader.onabort = function(e)
 28     {
 29         alert("abort");
 30     }
 31     reader.onerror = function(e)
 32     {
 33         alert("error");
 34     }
 35     reader.onloadstart = function(e)
 36     {
 37         alert("loadstart");
 38     }
 39     reader.onloadend = function(e)
 40     {
 41         alert("loadend");
 42     }
 43     reader.readAsDataURL(file);
 44 }
 45 </script>
 46
 47 <p>
 48 <label>请选择一个图像文件:</label>
 49 <input type="file" id="file" />
 50 <input type="button" value="显示图像" onclick="readFile();" />
 51 </p>
 52 <div name="result" id="result">
 53 <!-- 这里用来显示读取结果 -->
 54 </div>
 55
 56 

fileReader对象的事件先后顺序

拖放API

————————————————————————————————————————————————————————

在HTML5中,提供了直接支持拖放操作的API。虽然HTML5之前已经可以使用mousedown,mousemove,mouseup来实现拖放操作,但是只支持在浏览器内部的拖放,而在HTML5中,已经支持在浏览器与其他应用程序之间的数据的互相拖动,同时也大大简化了有关于拖放方面的代码。

额,好像FireFox对它有点反应,我这里不想过多学习,感觉实现功能上一般般。。。不过你拖动它可以在方框里显示,也可以直接搜索

  1 <!DOCTYPE html>
  2 <head>
  3 <meta charset="UTF-8">
  4 <title>拖放示例</title>
  5 <script type="text/javascript">
  6 function init()
  7 {
  8     var source = document.getElementById("dragme");
  9     var dest = document.getElementById("text");
 10     // (1) 拖放开始
 11     source.addEventListener("dragstart", function(ev)
 12     {
 13         // 向dataTransfer对象追加数据
 14         var dt = ev.dataTransfer;
 15         dt.effectAllowed = ‘all‘;
 16        //(2) 拖动元素为dt.setData("text/plain", this.id);
 17         dt.setData("text/plain", "明日科技欢迎你");
 18     }, false);
 19     // (3) dragend:拖放结束
 20     dest.addEventListener("dragend", function(ev)
 21     {
 22         //不执行默认处理(拒绝被拖放)
 23         ev.preventDefault();
 24     }, false);
 25     // (4) drop:被拖放
 26     dest.addEventListener("drop", function(ev)
 27     {
 28         // 从DataTransfer对象那里取得数据
 29         var dt = ev.dataTransfer;
 30         var text = dt.getData("text/plain");
 31         dest.textContent += text;
 32         //(5) 不执行默认处理(拒绝被拖放)
 33         ev.preventDefault();
 34         //停止事件传播
 35         ev.stopPropagation();
 36     }, false);
 37 }
 38 //(6) 设置页面属性,不执行默认处理(拒绝被拖放)
 39 document.ondragover = function(e){e.preventDefault();};
 40 document.ondrop = function(e){e.preventDefault();};
 41 </script>
 42 </head>
 43 <body onload="init()">
 44 <h1>拖放欢迎语</h1>
 45 <!-- (7) 把draggable属性设为true -->
 46 <div id="dragme" draggable="true" style="width: 200px; border: 1px solid gray;">
 47   请拖放
 48 </div>
 49 <br>
 50 <div id="text" style="width: 200px; height: 200px; border: 1px solid gray;"></div>
 51 </body>
 52 

拖放

具体来讲,你还可以用一些方法对它美化,不一一介绍,可查。

时间: 2024-10-12 19:48:32

HTML5学习之三:文件与拖放的相关文章

Html5 学习系列(四)文件操作API

原文:Html5 学习系列(四)文件操作API 引言 在之前我们操作本地文件都是使用flash.silverlight或者第三方的activeX插件等技术,由于使用了这些技术后就很难进行跨平台.或者跨浏览器.跨设备等情况下实现统一的表现,从另外一个角度来说就是让我们的web应用依赖了第三方的插件,而不是很独立,不够通用.在HTML5标准中,默认提供了操作文件的API让这一切直接标准化.有了操作文件的API,让我们的Web应用可以很轻松的通过JS来控制文件的读取.写入.文件夹.文件等一系列的操作,

Html5学习之拖放操作详解

在html5页面开发中,拖放操作里面非常重要的一个点就是,我们要确定哪里发生了拖放事件.顾名思义,拖放事件,就是有脱(drag)事件和放(drop)事件. 拖放操作里面非常重要的一个点就是,我们要确定哪里发生了拖放事件.顾名思义,拖放事件,就是有脱(drag)事件和放(drop)事件. 当某个元素被拖动的时候,在这个元素上将被依次触发以下事件: 1. dragstart 2. drag 3. dragend 按下鼠标键并开始移动鼠标时,就会在被拖动元素上触发 dragstart 事件,随机触发 

HTML5 学习笔记(一)——HTML5概要与新增标签

一.HTML5概要 1.1.为什么需要HTML5 HTML4陈旧不能满足日益发展的互联网需要,特别是移动互联网.为了增强浏览器功能Flash被广泛使用,但安全与稳定堪忧,不适合在移动端使用(耗电.触摸.不开放). HTML5增强了浏览器的原生功能,符合HTML5规范的浏览器功能将更加强大,减少了Web应用对插件的依赖,让用户体验更好,让开发更加方便,另外W3C从推出HTML4.0到5.0之间共经历了17年,HTML的变化很小,这并不符合一个好产品的演进规则. 1.2.什么是HTML5 HTML5

HTML5 学习总结(一)——HTML5概要与新增标签

目录 一.HTML5概要 1.1.为什么需要HTML5 1.2.什么是HTML5 1.3.HTML5现状及浏览器支持 1.4.HTML5特性 1.5.HTML5优点与缺点 1.5.1.优点 1.5.2.缺点 1.6.HTML5效果展示 1.7.HTML5学习与开发工具 1.7.1.基础要求 1.7.2.开发工具 1.8.HTML5语法规则与文档声明 1.8.1.语法规则 1.8.2.文档声明 1.8.2.文档声明 二.废弃的标签 三.新增的标签 3.1.新增的结构标签 3.2.新增加其它元素 3

HTML5 学习笔记--------》HTML5概要与新增标签!

一.HTML5概要 1.1.为什么需要HTML5 HTML4陈旧不能满足日益发展的互联网需要,特别是移动互联网.为了增强浏览器功能Flash被广泛使用,但安全与稳定堪忧,不适合在移动端使用(耗电.触摸.不开放). HTML5增强了浏览器的原生功能,符合HTML5规范的浏览器功能将更加强大,减少了Web应用对插件的依赖,让用户体验更好,让开发更加方便,另外W3C从推出HTML4.0到5.0之间共经历了17年,HTML的变化很小,这并不符合一个好产品的演进规则. 1.2.什么是HTML5 HTML5

HTML5 学习总结(一)——HTML5概要与新增标签(转载)

目录 一.HTML5概要 1.1.为什么需要HTML5 1.2.什么是HTML5 1.3.HTML5现状及浏览器支持 1.4.HTML5特性 1.5.HTML5优点与缺点 1.5.1.优点 1.5.2.缺点 1.6.HTML5效果展示 1.7.HTML5学习与开发工具 1.7.1.基础要求 1.7.2.开发工具 1.8.HTML5语法规则与文档声明 1.8.1.语法规则 1.8.2.文档声明 1.8.2.文档声明 二.废弃的标签 三.新增的标签 3.1.新增的结构标签 3.2.新增加其它元素 3

[HTML5_资源]给网页设计师的30个HTML5学习资源

Blowing up HTML5 video and mapping it into 3D space(将HTML5视频吹散并组成3D效果)最近我研究了HTML 5中的Canvas 和Video 标签,并发现了一些很酷的特性.其中之一就是Canvas.drawImage() api.此为详细介绍. Code a Backwards Compatible, One Page Portfolio with HTML5 and CSS3(用HTML5 和CSS3 打造向下兼容的网页)HTML5更加语义

感谢各位亲们的大力支持,免费的HTML5学习课程《HTML5网页开发实例具体解释》连载已经结束了!

感谢各位亲们的大力支持,免费的HTML5学习课程<HTML5网页开发实例具体解释>连载已经结束了.  有兴趣的读者能够看我的博客,也能够看以下的链接逐个学习: 当里个当.免费的HTML5连载来了<HTML5网页开发实例具体解释>连载(一) 免费的HTML5连载来了<HTML5网页开发实例具体解释>连载(二)内容交互 免费的HTML5连载来了<HTML5网页开发实例具体解释>连载(三)DOCTYPE和字符集 免费的HTML5连载来了<HTML5网页开发实

Html5学习系列

Html5学习系列 HTML5 规定了一种通过 video 元素来包含视频的标准方法 Ogg = 带有 Theora 视频编码和 Vorbis 音频编码的 Ogg 文件 MPEG4 = 带有 H.264 视频编码和 AAC 音频编码的 MPEG 4 文件 WebM = 带有 VP8 视频编码和 Vorbis 音频编码的 WebM 文件 如需在 HTML5 中显示视频,您所有需要的是: <video src="movie.ogg" controls="controls&q