<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, minimum-scale=1, maximum-scale=1">
<script type="text/javascript"> </script>
<style type="text/css">
.want {
border:2px solid red;
}
.nowant {
border: 1px solid black;
}
</style>
</head>
<body>
<div id="fileUpload" class="nowant" style="width: 200px; height: 200px;"></div>
<div id="test"></div>
</body> </html>
<script type="text/javascript"> var isUpload = false;
window.onload = function () { var targer = document.getElementById("fileUpload");
//当拖曳元素进入目标元素的时候触发的事件,此事件作用在目标元素上
targer.ondragenter = function (e) {
if (isUpload) return;//如果正在上传中 则不允许再放置上传
var types = e.dataTransfer.types;//该属性返回一个DOMStringList对象,该对象包括了存入dataTransfer中数据的所有类型。
if (types && types.some(function(v) { return v === "Files" })) {
return false;//阻止浏览器默认操作
}
}
//拖拽元素在目标元素上移动的时候触发的事件,此事件作用在目标元素上
targer.ondragover = function (e) {
document.getElementById("fileUpload").classList.remove("nowant");
document.getElementById("fileUpload").classList.add("want");
return false;//阻止浏览器默认操作
}
// 在可拖动的元素移出放置目标时执行 JavaScript :
targer.ondragleave = function (e) {
document.getElementById("fileUpload").classList.remove("want");
document.getElementById("fileUpload").classList.add("nowant");
return false;
}
//在可拖动元素放置在 <div> 元素中时执行 JavaScript:
targer.ondrop = function (e) {
if (isUpload) return false;//在上传的途中不允许再上传
console.log(e.dataTransfer);//这样输出是拿不到信息的
var files = e.dataTransfer.files;//获得 放置的文件信息
//这个例子只允许单文件上传哟
if (files && files.length > &&files.length==) {
//创建xhr 使用xhr2 进行文件上传
var xhr = new XMLHttpRequest();
xhr.open("POST", "@Url.Action("Upload")");//设置上传方式以及处理请求地址
var body = new FormData();//请求报文体数据存储点 body.append("file",files[]);
//上传进度回调
xhr.upload.onprogress=function(e) { if (e.lengthComputable) {
document.getElementById("test").innerHTML = (e.loaded / e.total * ) + "%";
} }
xhr.onload=function(e) {
isUpload = false;//上传完成可继续拖拽上传
}
xhr.send(body);
document.getElementById("fileUpload").classList.remove("want");
document.getElementById("fileUpload").classList.add("nowant");
} return false;//组织浏览器默认操作
}
}
</script>

主要实现步骤是利用html 几个拖拽事件

1.当文件拖动到容器时候 容器增加边框高亮样式

2.当文件拖出边框的时候 删除边框高亮样式

3.当文件放置在容器的时候 通过事件参数 获得 放置的文件信息

4.使用html5 的formdata 对象 将文件信息添加进去

5.使用XHR2 将formdata 发送到服务器处理(在此之前 同事使用xhr2 注册 上传进度回调)

html5拖拽事件 xhr2 实现文件上传 含进度条的更多相关文章

  1. atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7

    atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7 1. 实现原理 1 2. 大的文件上传原理::使用applet 1 3. 新的bp 2 1. 性能提升---分割小文件上传 ...

  2. atitit. 文件上传带进度条 atiUP 设计 java c# php

    atitit. 文件上传带进度条 atiUP 设计 java c# php 1. 设计要求 1 2. 原理and 架构 1 3. ui 2 4. spring mvc 2 5. springMVC.x ...

  3. HTML5 + AJAX ( jQuery版本 ) 文件上传带进度条

    页面技术:HTML5 + AJAX ( jQuery) 后台技术:Servlet 3.0 服务器:Tomcat 7.0 jQuery版本:1.9.1 Servlet 3.0 代码 package or ...

  4. HTML5文件上传还有进度条

    以下是自学it网--中级班上课笔记 网址:www.zixue.it 需要在chrome,ff,IE10下运行 html页面 <!DOCTYPE html> <html lang=&q ...

  5. Flex4/Flash多文件上传(带进度条)实例分享

    要求 必备知识 本文要求基本了解 Adobe Flex编程知识和JAVA基础知识. 开发环境 MyEclipse10/Flash Builder4.6/Flash Player11及以上 演示地址 演 ...

  6. jquery 实现拖动文件上传加进度条

    通过对文件的拖动实现文件的上传,主要用到的是HTML5的ondrop事件,上传内容通道FormData传输: //进度条 <div class="parent-dlg" &g ...

  7. struts2多文件上传(带进度条)demo+说明

    利用plupload插件实现多文件上传,实现图片: 在jsp写入js代码: z<%@ page language="java" contentType="text/ ...

  8. BootStrap Progressbar 实现大文件上传的进度条

    1.首先实现大文件上传,如果是几兆或者几十兆的文件就用基本的上传方式就可以了,但是如果是大文件上传的话最好是用分片上传的方式.我这里主要是使用在客户端进行分片读取到服务器段,然后保存,到了服务器段读取 ...

  9. Springboot 文件上传(带进度条)

    1. 相关依赖 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http ...

随机推荐

  1. 9.2.2 .net framework下的MVC 控件的封装(下)

    控件封装的部分说明 可能有人觉得应该前后端分离,我也承认这是应该的方向,我们也在考虑使用ng2等简化前端.但是,我们封装控件还是因为如下原因综合考虑的: 我们这是个框架,上面支撑了许多个应用,包含几百 ...

  2. 详细介绍Mysql各种存储引擎的特性以及如何选择存储引擎

    最近业务上有要求,要实现类似oracle 的dblink   linux版本 Server version: 5.6.28-0ubuntu0.14.04.1 (Ubuntu) 修改配置文件 /etc/ ...

  3. 了解JavaScript 对象属性的标签

    对象属性的标签 value(属性值), writable(属性可写), enumerable(属性可枚举), configurable(属性可配置), 这些属性标签使对象所持有的属性体现出不同的特性, ...

  4. 分享iOS开发常用(三方类库,工具,高仿APP,实用网站,技术干货)

    一 . JSONModel  (三方类库会有更新,建议大家在线下载) http://pan.baidu.com/s/1i5ybP1z 二.AFNetworkiong http://pan.baidu. ...

  5. SVN为什么比Git更好

    首先我表明一个根本的立场,我个人更喜欢用Git,但是,这仅仅是一个个人偏好.当我们需要将一种技术方案带给整个团队的时候,并不是由我们的个人偏好作为主要决定因素,而应该充分去权衡利弊,选择对团队,对公司 ...

  6. 吐槽CodeDom

    用着.NET Framework,发现了CodeDom的先天性缺陷,心里百般难受. 不知道 CodeDom 是什么的请看这里 CodeDom_百度百科 这里有CodeDom非常全的中文教程 CodeD ...

  7. PHP对象Object的概念

    类提供了一个基础,可以在此基础上创建实体(即这个类所建模的实体)的特定实例,这些特定实例称为对象(object) 例如,员工管理应用程序可能包括一个EmPloyee 类.然后可以用这个类来创建和维护特 ...

  8. 办公OA的登陆界面..

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  9. SqlServer SET IDENTITY_INSERT ON | OFF

    想要将值插入到自动编号(或者说是标识列,IDENTITY)中去,需要设定 SET IDENTITY_INSERT 示例: 1.首先建立一个有标识列的表: )) 2.尝试在表中做以下操作: , 'gar ...

  10. 让我们用心感受泛型接口的协变和抗变out和in

    关键字out和in相信大家都不陌生,系统定义的很多泛型类型大家F12都或多或少看见了.但是实际中又很少会用到,以前在红皮书里看到,两三页就介绍完了.有的概念感觉直接搬出来的,只是说这样写会怎样,并没有 ...