这是一个网友的代码 你可以参考一下
创新互联于2013年开始,是专业互联网技术服务公司,拥有项目成都网站制作、网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元陕州做网站,已为上家服务,为陕州各地企业和个人服务,联系电话:028-86922220
!doctype html
html
head
meta charset="utf-8"
title无标题文档/title
/head
script
function mstart(a){
//设置初始数据setdata()
a.dataTransfer.setData("Text",a.target.id);
}
function mover(a){
//把系统默认鼠标或拖拽操作屏蔽掉
a.preventDefault();//屏蔽系统默认的dragover引发的效果
}
function mdrop(a){
a.preventDefault();
var data=a.dataTransfer.getData("Text");
a.target.appendChild(document.getElementById(data));
}
/script
body
div id="mydiv" style="height:568px; width:500px; border:2px solid" ondragover="mover(event)" ondrop="mdrop(event)"/div
img id="myimg1" src="vt.jpg" width="250" height="200" draggable="true" ondragstart="mstart(event)"
img id="myimg2" src="vt.jpg" width="250" height="200" draggable="true" ondragstart="mstart(event)"
img id="myimg3" src="vt.jpg" width="250" height="200" draggable="true" ondragstart="mstart(event)"
br
/body
/html
,首先要判断拖入的文件是否符合要求,包括图片类型、大小等,然后获取本地图片信息,实现预览,最后上传。
$(function(){
...接上部分
var box = document.getElementById('drop_area'); //拖拽区域
box.addEventListener("drop",function(e){
e.preventDefault(); //取消默认浏览器拖拽效果
var fileList = e.dataTransfer.files; //获取文件对象
//检测是否是拖拽文件到页面的操作
if(fileList.length == 0){
return false;
}
//检测文件是不是图片
if(fileList[0].type.indexOf('image') === -1){
alert("您拖的不是图片!");
return false;
}
//拖拉图片到浏览器,可以实现预览功能
var img = window.webkitURL.createObjectURL(fileList[0]);
var filename = fileList[0].name; //图片名称
var filesize = Math.floor((fileList[0].size)/1024);
if(filesize500){
alert("上传大小不能超过500K.");
return false;
}
var str = "img src='"+img+"'p图片名称:"+filename+"/pp大小:"+filesize+"KB/p";
$("#preview").html(str);
//上传
xhr = new XMLHttpRequest();
xhr.open("post", "upload.php", true);
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
var fd = new FormData();
fd.append('mypic', fileList[0]);
xhr.send(fd);
},false);
});
把文件从桌面拖拽到浏览器是Web应用程序集成的最终目标之一。本教程共四篇文章(本文是第一篇),主要介绍了:
1.实现将文件拖放到页面元素上
2.在JavaScript中分析被拖放的文件
3.在客户端上加载和解析文件
4.使用XMLHttpRequest2将文件异步上传到服务器
5.上传时,显示图形进度条
6.使用进程增强( progressive enhancement)以确保文件上传表单在所有浏览器正常工作
7.纯JavaScript代码,不使用其它库。
咻,开始吧!
糟糕的浏览器支持
在开始之前说明一下,这个教程使用了一些HTML5的最新技术,可能以后会被修正。目前代码可以正常工作,但是很可能随着API的变化或者浏览器升级而受到影响。
§Firefox和Chrome的最新版本支持所有的功能并且可以完美运行。
§Opera可以用JavaScript解析文件,但未实现拖放文件和XMLHttpRequest2上传。
§IE浏览器和桌面版本的Safari不支持所有的API。
§苹果已禁用Safari浏览器的iPhone和iPad版本的HTML文件上传表单。有谁知道为什么吗?
最后,请注意我的代码只是演示了基本概念,几乎没有错误检查,因此需要进行修改以适应你的工作需要。
HTML和CSS
这是我们的带有文件输入类型的标准表单。唯一的HTML5特性是“multiple”属性,它允许用户选择任意数量的文件。
我们将上传文件到运行PHP的服务器上,但是无论你在服务器端使用什么技术,代码是大致相同的。隐藏的MAX_FILE_SIZE值指定为300,000个字节,这是PHP使用的,但我们还会在浏览器端用它进行检查,以防止大文件上传。
#filedrag元素将被用作接收拖放文件的位置。元素是通过CSS隐藏的,但如果浏览器支持拖拽的话,它会在JavaScript中被显示:
我们还定义了一个.hover类,当用户拖动文件到相应区域元素时,改变元素的显示风格。浏览器不支持在那种情况下的:hover风格,但当事件触发时,我们可以用JavaScript添加类。
文件操作API
W3C 文件操作API
提供了一些对象,我们使用了:
§FileList:代表选定的文件数组。
§File:代表一个单独的文件。
§FileReader:支持JavaScript的客户端读取文件数据的接口。
Javascript事件
是时候处理JavaScript代码了。我们不使用任何JavaScript库,为了节省时间,我们将创建一个辅助函数返回元素的ID和输出状态消息:
我们将在Init()函数里检查文件操作API是否有效:
Init()函数说明:
1.给文件输入元素设置一个“change”事件监听器。
2.显示#filedrag元素。
3.设置“dragover”和“dragleave”事件监听器,以改变的#filedrag元素的风格。
4.给#filedrag元素设置一个“drop”的事件监听器。
5.隐藏表单的提交按钮 - 它不是必需的,因为当文件被选中时我们将进行分析和上传,而不是提交表单。
或者,当浏览器支持文件拖动时,你可以隐藏文件输入元素。就个人而言,我更愿意同时提供两种选择,因为拖放实际上会带来实用性的问题。
XMLHttpRequest.upload方法检查防止在Opera中的问题。浏览器支持File,FileList和FileReader,但不支持拖放事件或XMLHttpRequest2。因此,它可以显示文件信息,但我们不希望显示#filedrag的元素或删除submit按钮。
改变文件拖放风格
很少人在浏览器中进行过文件拖放。事实上,经验丰富的网络用户也不太考虑是否可行。因此,我们使用了标有“drop files here”的元素。当文件拖到#filedrag上时,我们还通过改变元素的风格来进行显示。
分析放下或被选中的文件
无论是使用“Browse”按钮来选中一个或多个文件,或者将文件拖放到拖#filedrag的位置上,我们使用的的相同FileSelectHandler()函数来进行处理:
函数说明:
1.调用FileDragHover()删除hover风格和取消浏览器的事件。这是必不可少的,否则浏览器可能会尝试显示该文件。
2.获取一个FileList对象,无论是从文件输入框(e.target.files)或#filedrag元素(例如dataTransfer.files)。
3.最后,函数遍历FileList的所有File对象,并把它作为一个参数传递给ParseFile()函数...
该函数输出的信息是File对象提供的三个主要的只读属性:
§.name: 文件名 (不包含文件路径)。
§.type: MIME类型, 例如 image/jpeg,text/plain等等。
§.size: 文件大小(字节).
html5 拖动效果在手机上实现方法是调用drag和drop一系列函数实现的。
注意:拖拽源在拖拽操作结束将得到dragend事件对象,不管操作成功与否。
举例:
定义可拖放内容
div id="columns"
div class="column" draggable="true"headerA/header/div
div class="column" draggable="true"headerB/header/div
div class="column" draggable="true"headerC/header/div
/div
2、监听拖动事件
可附加大量不同事件以监听整个拖放过程:
dragstart
drag
dragenter
dragleave
dragover
drop
dragend
a.这里是开始拖拽
function handleDragStart(e) {
this.style.opacity = '0.4'; // this / e.target is the source node.
}
var cols = document.querySelectorAll('#columns .column');
[].forEach.call(cols, function(col) {
col.addEventListener('dragstart', handleDragStart, false);
});
b.dragenter、dragover 和 dragleave 事件处理程序可用于在拖动过程中提供额外的可视化提示。例如,在拖动期间将鼠标悬停在某一列上方时,其边框可能会变成虚线。这样,用户就能知道这些列也是放置的目标区域。
HTML 5 拖放
HTML5 音频
HTML5 画布
拖放(Drag 和 drop)是 HTML5 标准的组成部分。
拖放
拖放是一种常见的特性,即抓取对象以后拖到另一个位置。
在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放。
浏览器支持
Internet Explorer 9、Firefox、Opera 12、Chrome 以及 Safari 5 支持拖放。
注释:在 Safari 5.1.2 中不支持拖放。
HTML5 拖放实例
下面的例子是一个简单的拖放实例:
实例
!DOCTYPE HTML
html
head
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
/head
body
div id="div1" ondrop="drop(event)"
ondragover="allowDrop(event)"/div
img id="drag1" src="img_logo.gif" draggable="true"
ondragstart="drag(event)" width="336" height="69" /
/body
/html
亲自试一试
它看上去也许有些复杂,不过我们可以分别研究拖放事件的不同部分。
设置元素为可拖放
首先,为了使元素可拖动,把 draggable 属性设置为 true :
img draggable="true" /
拖动什么 - ondragstart 和 setData()
然后,规定当元素被拖动时,会发生什么。
在上面的例子中,ondragstart 属性调用了一个函数,drag(event),它规定了被拖动的数据。
dataTransfer.setData() 方法设置被拖数据的数据类型和值:
function drag(ev)
{
ev.dataTransfer.setData("Text",ev.target.id);
}
在这个例子中,数据类型是 "Text",值是可拖动元素的 id ("drag1")。
放到何处 - ondragover
ondragover 事件规定在何处放置被拖动的数据。
默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。
这要通过调用 ondragover 事件的 event.preventDefault() 方法:
event.preventDefault()
进行放置 - ondrop
当放置被拖数据时,会发生 drop 事件。
在上面的例子中,ondrop 属性调用了一个函数,drop(event):
function drop(ev)
{
ev.preventDefault();
var data=ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(data));
}
代码解释:
调用 preventDefault() 来避免浏览器对数据的默认处理(drop 事件的默认行为是以链接形式打开)
通过 dataTransfer.getData("Text") 方法获得被拖的数据。该方法将返回在 setData() 方法中设置为相同类型的任何数据。
被拖数据是被拖元素的 id ("drag1")
把被拖元素追加到放置元素(目标元素)中