拖拽

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title></title>
 5     <meta name="name" content="content" charset="utf-8">
 6 </head>
 7 <body>
 8     <div class="container" style="widht:500px;height:500px;border:1px solid #ddd">
 9       <p class="text">请将图片文件拖拽至此区域!</p>
10     </div>
11     <script src="jquery-1.12.4.min.js"></script>
12     <script type="text/javascript">
13     $(function() {
14       /*思路:
15        *1.熟悉文件拖拽 目标元素 的四个事件,注意:ondragover、ondrop事件中阻止默认行为
16        *2.拖拽放置后,获取到文件对象集合:e.dataTransfer.files
17        *3.循环该集合中的每个文件对象,判断文件类型以及文件大小,是指定类型则进行相应的操作
18        *4.读取文件信息对象:new FileReader(),它有读取文件对象为DataUrl等方法:readAsDataURL(文件对象)、读取成功之后触发的事件:onload事件等,this.result为读取到的数据
19        *5.在FileReader对象中的几个事件中进行相应的逻辑处理
20        *
21        */
22  
23       //必须将jq对象转换为js对象,调用原生方法
24       var oDiv = $(".container").get(0);
25       var oP = $(".text");
26       //进入
27       oDiv.ondragenter = function() {
28           oP.html('');
29         }
30         //移动,需要阻止默认行为,否则直接在本页面中显示文件
31       oDiv.ondragover = function(e) {
32  
33           e.preventDefault();
34         }
35         //离开
36       oDiv.ondragleave = function() {
37           oP.html('请将图片文件拖拽至此区域!');
38         }
39         //拖拽放置,也需要阻止默认行为
40       oDiv.ondrop = function(e) {
41  
42         e.preventDefault();
43         //获取拖拽过来的对象,文件对象集合
44         var fs = e.dataTransfer.files;
45         //若为表单域中的file标签选中的文件,则使用form[表单name].files[0]来获取文件对象集合
46         //打印长度
47         console.log(fs.length);
48         //循环多文件拖拽上传
49         for (var i = 0; i < fs.length; i++) {
50           //文件类型
51           var _type = fs[i].type;
52  
53           console.log(_type);
54           //判断文件类型
55           if (_type.indexOf('image') != -1) {
56             //文件大小控制
57             console.log(fs[i].size);
58             //读取文件对象
59             var reader = new FileReader();
60             //读为DataUrl,无返回值
61             reader.readAsDataURL(fs[i]);
62             reader.onloadstart = function(e) {
63                 //开始加载
64               }
65               // 这个事件在读取进行中定时触发
66             reader.onprogress = function(e) {
67  
68               $("#total").html(e.total);
69             }
70  
71             //当读取成功时触发,this.result为读取的文件数据
72             reader.onload = function() {
73                 //文件数据
74                 // console.log(this.result);
75                 //添加文件预览
76                 var oImg = $("<img style='width:100px;' src='' />");
77                 oImg.attr("src", this.result);
78                 $(oDiv).append(oImg); //oDiv转换为js对象调用方法
79               }
80               //无论成功与否都会触发
81             reader.onloadend = function() {
82               if (reader.error) {
83                 console.log(reader.error);
84               } else {
85                 //上传没有错误,ajax发送文件,上传二进制文件
86               }
87             }
88           } else {
89             alert('请上传图片文件!');
90           }
91         }
92  
93       }
94     });
95   </script>
96 </body>
97 </html>

 

posted @ 2016-12-05 17:04  蛋Mrs炒饭  阅读(258)  评论(0编辑  收藏  举报