html5之拖拽(2)

从本地文件拖拽到浏览器,可以拖动多个文件,并且预览效果

在前面的基础上添加的

 1        /*box3*/
 2             box3.ondragover = ondragover;
 3             box3.ondrop = function (event) {
 4                 event.preventDefault();
 5                 var filesList = event.dataTransfer.files; //读取到的数据集合
 6
 7                 for (var i = 0; i < filesList.length; i++) {
 8                     var fileReader = new FileReader(); //每次都要重新构造才能访问到每个文件
 9
10                     showMsg("文件个数:" + filesList.length + "  第几个文件 " + i)
11                     var file = filesList[i];
12
13                     if (!(file.name.match("jpg") || file.name.match("png") || file.name.match("bmp") || file.name.match("gif"))) {
14                         alert("不是一个标准的图像文件!");
15                         continue;
16                     }
17                     fileReader.readAsDataURL(file); //从指定url读入文件
18
19                     fileReader.onload = function (e) {  //这个e指向的是当前的fileReader
20                         //使用生成添加子节点
21                         //var img = document.createElement("img");
22                         // img.src = fileReader.result;//
23                         //怎么添加指定样式class?
24                         //img.style.margin = 10;
25                         //event.target.appendChild(img)
26
27
28                         //使用嵌入HTML
29                         var strHtml = "<img src=\"" + e.target.result + "\" class=\"boxImg\">";
30                         event.target.innerHTML += strHtml;
31                     }
32
33
34                 }
35             }

一开始我把 var fileReader = new FileReader();

放到了循环之外,导致了 Uncaught InvalidStateError: Failed to execute ‘readAsDataURL‘ on ‘FileReader‘: The object is already busy reading Blobs.这个FileReader应该对应于每一个读取的文件都需要重新new一个

然后在那个循环处onload时,我用fileReader.result 每次只能拖动显示最后一个,此时的fileReader应该是指向最后一个的fileReader,所以应该用当前每个fileReader对应的对象来调用,所以就用了e.target.result

我想这个应该可以实现从本地文件拖动多个文件上传,并且实现预览效果吧,下次再来加工一下

时间: 2024-12-13 15:42:53

html5之拖拽(2)的相关文章

HTML5开发 拖拽文件上传

Drag&Drop 拖拽功能的处理 关于HTML5拖拽文件上传,其实国外已经有很多网站有这样的应用,最早推出拖拽上传应用的是 Gmail,它支持标准浏览器下拖拽本地文件到浏览器中作为邮件的附件发送,但其实现在利用HTML5的功能实现,主要借助于新版支持的浏览器来实现,IE还是弱很多. 拖拽上传应用主要使用了以下 HTML5技术: Drag&Drop : HTML5基于拖拽的事件机制.File API : 可以很方便的让 Web 应用访问文件对象,File API 包括FileList.Bl

HTML5之拖拽(兼容IE和非IE)

前世:项目中需要拖动div,然后和某个div进行位置交换,这不是关键,关键是还要保存位置,然后在下次打开的时候按照保存的位置显示.还好本人功力深厚,一下子就想到了用localStorage来保存,事实证明真的很好用哦.保存数据的方法有了,然后开始"探索"如何用html(5)和js来实现拖拽的效果,由于H5给了比较规范的实现方式,所以在Chrome中轻松实现,万恶的IE(很少骂IE)竟然不兼容,NONONONO,心塞,只好用了两种方式分别实现拖拽效果.(其实两种方式内的代码很相似,唯一不

Nodejs express、html5实现拖拽上传

Nodejs express.html5实现拖拽上传 一.前言 文件上传是一个比较常见的功能,传统的选择方式的上传比较麻烦,需要先点击上传按钮,然后再找到文件的路径,然后上传.给用户体验带来很大问题.html5开始支持拖拽上传的需要的api.nodejs也是一个最近越来越流行的技术,这也是自己第一次接触nodejs,在nodejs开发中,最常用的开发框架之一是expess,它是一个类似mvc模式的框架.结合html5.nodejs express实现了拖拽上传的功能. 二.基础知识普及 1.No

基于html5可拖拽图片循环滚动切换

分享一款基于html5可拖拽图片循环滚动切换.这是一款支持手机端拖拽切换的网站图片循环滚动特效.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div id="site-wrapper"> <section id="section-header" data-coloroverlap="dark"></section> <section id="second-phase&qu

HTML5 鼠标拖拽以及web存储

html5 拖拽: (function(){}())执行匿名函数,要用括号包括起来: 1:用鼠标事件来做拖拽: 2:在HTML5中加入draggable="true",就可以拖拽但是是分成了两个,这个更有效率: ondragstart:拖拽开始: ondrag:拖拽中 ondragend:拖拽结束: ondragenter:进入投放去: ondragover:投放区移动: ondragleave:离开投放区: ondrop:投放区投放:           ondragover会阻止d

html5之拖拽(1)

1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title>图像拖动</title> 6 7 8 <style> 9 body { 10 margin: 0px;; 11 } 12 13 .container { 14 background-color: lightcyan; 15 w

HTML5 的拖拽介绍

本文主要介绍与拖拽操作相关的对象及事件信息,但并不涉及太多的源码演示. 一个简单的示例 在html5中要实现拖放操作,相对于以前通过鼠标操作实现,要简单得多,数据安全性也更有保障.只需要以下几步即可. 给被拖拽元素添加draggable属性,如果是文件拖放. 为目标元素添加一个dropzone属性,这一步也不是必须的,可以省略. 在拖拽元素的dragstart中初始化相关的数据信息,主要是DataTransfer对象. 在目标元素的dragover事件中,取消其默认操作. 在目标元素的drop事

[开源应用]利用HTML5+resumableJs拖拽上传大文件

前言: 大文件传输一直是技术上的一大难点.文件过大时,一些性提交所有的内容进内存是不现实的.大文件带来问题还有是否支持断点传输和多文件同时传输. 本文以resumableJs为例,介绍了如何在ASP.NET中实现大文件传输.同时本文利用了Html5的新特性:支持拖拽. 本文的主要技术点在于:如何接收resumableJs的传送内容(官网不太清楚)和如何合并文件,难度并不高. 注:原博客中,此文章为原站点个人代码备份所用,注释不多,如有不懂,请在评论中给出. 效果: ASPX File: <htm

Nodejs express、html5实现拖拽上传(转载)

一.前言 文件上传是一 个比较常见的功能,传统的选择方式的上传比较麻烦,需要先点击上传按钮,然后再找到文件的路径,然后上传.给用户体验带来很大问题.html5开始支持拖 拽上传的需要的api.nodejs也是一个最近越来越流行的技术,这也是自己第一次接触nodejs,在nodejs开发中,最常用的开发框架之一是 expess,它是一个类似mvc模式的框架.结合html5.nodejs express实现了拖拽上传的功能. 二.基础知识普及 1.NodeJs基础知识 nodejs简单来说就是一个可

html5的拖拽dragAPI(如果看了API不懂,看看那三个案例就会恍然大悟)

1.拖拽和释放定义: 拖拽:Drag; 释放:Drop; 2.源对象和目标对象: 3.相关API: ondragstart:源对象开始被拖动 ondrag:源对象被拖动的过程中 ondragend:源对象被拖动结束 ondragenter:目标对象被源对象拖动进入 ondragover:目标对象被源对象悬浮在上面 ondragleave:源对象拖动着离开了目标对象 ondrop:源对象拖动着在目标对象上方松手 4.拖动的源对象和目标对象之间的数据传递: 源对象数据保存:e.data.Transf