码迷,mamicode.com
首页 > Web开发 > 详细

html5拖拽事件 xhr2 实现文件上传 含进度条

时间:2017-01-07 09:57:31      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:组织   body   创建   doc   add   ons   var   ack   com   

<!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 > 0&&files.length==1) {
                //创建xhr 使用xhr2  进行文件上传
                var xhr = new XMLHttpRequest();
                xhr.open("POST", "@Url.Action("Upload")");//设置上传方式以及处理请求地址
                var body = new FormData();//请求报文体数据存储点
                
                body.append("file",files[0]);
                //上传进度回调
                xhr.upload.onprogress=function(e) {
                    
                    if (e.lengthComputable) {
                        document.getElementById("test").innerHTML = (e.loaded / e.total * 100) + "%";
                    }
                   
                }
                xhr.onload=function(e) {
                    isUpload = false;//上传完成可继续拖拽上传
                }
                xhr.send(body);
                document.getElementById("fileUpload").classList.remove("want");
                document.getElementById("fileUpload").classList.add("nowant");
            }

            return false;//组织浏览器默认操作
        }
    }
</script>

 

html5拖拽事件 xhr2 实现文件上传 含进度条

标签:组织   body   创建   doc   add   ons   var   ack   com   

原文地址:http://www.cnblogs.com/LQBlog/p/6258683.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!