<!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. EL表达式的算术运算

    一个例子--乘法运算 ${book.bookCount * book.bookPrice } 两个不同对象的EL表达式的算术运算同理 ${student.studentNum * book.bookP ...

  2. jquery瀑布流的制作

    首先,还是来看一下炫酷的页面: 今天就边做边说了: 一.准备工作 新建css,js,img文件夹存放相应文件,并在demo.html文件中引入外部文件(注意要把jquery文件引入),这里就不过多描述 ...

  3. JS正则表达式(JavaScript regular expression)

    RegExp直接量和对象的创建 就像字符串和数字一样,程序中每个取值相同的原始类型直接量均表示相同的值,这是显而易见的.程序运行时每次遇到对象直接量(初始化表达式)诸如{}和[]的时候都会创建新对象. ...

  4. sharepoint 计算列 年龄

    1.建立一个字段叫做Today ,(类型为文本都行) 2.建立你想要计算字段年龄,公式=IF(ISBLANK(出生年月),"NA",DATEDIF(出生年月,Today," ...

  5. safari 浏览器window.history.go(-1)运行无效解决办法

    这几天做了几个手机端app的wap页面,做完之后发现一个问题,那就是ios系统下的safari浏览器不支持window.history.go(-1)..无语... 解决方法很简单!加上return f ...

  6. Highchart基础教程-图表配置

    一.图表容器: Highcharts 实例化中绑定容器的两种方式: 1.通过 dom 调用 highcharts() 函数的方式 $("#container").highchart ...

  7. C#接口的显示和隐式实现

    早上骑车上班走到半路发现手机忘带了,这年代兜里没装一分现金,吃饭都要刷手机,上班时间无聊了不能玩手机更是大问题,所以果断掉头拿手机.取完手机刚出门看这天阴沉沉的貌似要下雨,没雨衣,骑车又不能打伞,上次 ...

  8. Oracle读取excel

    --解析excel,转换成table,可供查询,支持xls.xlsx --首先修改这个Type,长度改为4000. CREATE OR REPLACE TYPE XYG_PUB_DATA_UPLOAD ...

  9. C#Winform连接Oracle数据库

    转载▼ http://blog.sina.com.cn/s/blog_900ca29d0102vn3r.html 一.连接方法 (1)System.Data.OracleClient 注意1:此方法在 ...

  10. 解决ubuntu eclipse中 Android SDK Manager 图标不见的方法

    在eclipse中选择的步骤如下:   Window ---> Custom Perspective  --> command Group Availability ----> an ...