今天闲着没事,把之前的多张图片上传代码整理了下。

页面主要代码:

 <div class="upBox upBox2">
<div class="d1">
<a class="redA1 rightA" href="javascript:choosePhotos();" id="continue_add_button" style="display:none;">继续添加</a>
</div>
<div class="d2" id="add_photo_button">
<a href="javascript:choosePhotos();" class="blueA1">从电脑上传照片</a>
<p class="p1">注:支持JPG格式多张上传,按住Ctrl或Shift选择图片,一次最多可上传150张照片</p>
</div>
<input type="file" id="upload" accept="image/jpeg" multiple="multiple" style="display:none;" />
<canvas id="myCanvas" style="display:none;"></canvas>
<div class="d3">
<ul class="ul1 clearfix" id="local_upload_div"> </ul>
</div>
</div>

js部分主要代码,其实不用html5的画布也行,不过貌似用画布页面加载比直接预览图较快。

具体上传代码没写,和单张上传是一样的,需要的朋友可以去我的另一篇写单张上传的博客里看一下:JavaScript实现单张图片上传功能

 //准备上传的模板
var mb_upload = "<li id=\"up_li_INDEX\">"+
"<div>"+
"<div class=\"imgD\">" +
"<img id=\"up_img_INDEX\" src=\"/img/upload/morenI.png\" >"+
"</div>" +
"<p class=\"jdP\" id=\"up_p_INDEX\">" +
"<img class=\"i1\" src=\"/img/upload/loading.gif\">"+
"准备上传"+
"</p>" +
"</div>"+
"</li>"; $(function(){
//文件域改变时触发
$('#upload').change(function (evt) {
fileChange(evt);
});
}); //触发文件域
function choosePhotos(){
$("#upload").click();
} //文件域改变时触发
function fileChange(evt){
var files = evt.target.files;
if(files.length == 0)return;
//上传页面已有照片数量
var up_page_num = $("#local_upload_div li").length; $("#add_photo_button").hide();
$("#continue_add_button").show(); layer.msg('照片加载中', {icon: 16}); for(var m=0; m<files.length; m++){
var f = files[m];
console.log("type="+f.type+" name="+f.name+" length="+f.size);
addPhoto(m+1+up_page_num);
}
getImagesInfo(files,0,up_page_num); } //页面添加等待上传的预显示图片
function addPhoto(i){
var segment = mb_upload;
segment = segment.replace(/INDEX/g,i);
$("#local_upload_div").append(segment);
} //获取到照片信息并在页面添加预览图
var getImagesInfo = function(files,a,up_page_num){ if(files.length > a){ usUploading = true; var f = files[a]; ///var type = f.type;
//获取容器
var c = document.getElementById("myCanvas");
//获取画布对象
var cxt = c.getContext("2d"); var reader = new FileReader(); var name = f.name;//完整照片名称,带格式 //异步方法,文件读取完毕才执行
reader.onload = function(e){
//图片的读取结果
var dataImg = e.target.result;
var img = new Image();
//异步方法
img.onload = function(){
var ratio = img.width/img.height;
var h,w;
//等比例压缩宽和高
if(ratio>1){
w = 110;
h = w*img.height/img.width;
}else{
h = 110;
w = h*img.width/img.height;
}
//容器设置宽和高
c.width = w;
c.height = h;
//清空容器
cxt.clearRect(0, 0, w, h);
//开始作画
cxt.drawImage(img,0,0,w,h);
//获取容器中画的url
var compressed = c.toDataURL("image/jpeg"); //将预览图插入上传页面
$("#up_img_"+(a+1+up_page_num)).attr("src",compressed);
$("#up_img_"+(a+1+up_page_num)).show("slow"); syncUpload(files,dataImg,a,name,up_page_num);
};
//将图片的读取结果赋到img对象的src属性上
img.src = dataImg;
};
//将图片读取为URL数据:base64编码
reader.readAsDataURL(f);
}
} //原图上传
var syncUpload = function(files,imgStr,index,name,up_page_num){ sleep(1000);//延时1s,模拟ajax,O(∩_∩)O哈哈~ //这里就是和单张上传逻辑一样了,只不过在上传成功后再次调用上面的方法,具体上传的方法就不写了
$("#up_p_"+(index+1+up_page_num)).html("<img class=\"i1\" src=\"/img/upload/duihao2.png\">"+
"上传成功"+
"<a href=\"javascript:void(0);\" class=\"right\"><img class=\"i2\" src=\"/img/upload/shanI.gif\"></a>"); getImagesInfo(files,++index,up_page_num); }; //设置延时函数
function sleep(numberMillis) {
var now = new Date();
var exitTime = now.getTime() + numberMillis;
while (true) {
now = new Date();
if (now.getTime() > exitTime)return;
}
}

看看基本效果O(∩_∩)O:

JavaScript实现多张图片上传功能的更多相关文章

  1. JavaScript实现单张图片上传功能

    前台jsp代码 <%@ page language="java" pageEncoding="UTF-8" contentType="text/ ...

  2. jQuery插件AjaxFileUpload文件上传实现Javascript多文件上传功能

     Ajax file upload plugin是一个功能强大的文件上传jQuery插件,可自定义链接.或其它元素庖代传统的file表单上传结果,可实现Ajax动态提示文件上传 过程,同时支撑多文 ...

  3. 用原生JS实现多张图片上传及预览功能(兼容IE8)

    最近需要做一个图片上传预览的功能(兼容IE8-11.chrome.firefox等浏览器),网上现有的文件上传组件(如webuploader)总是会遇到一些兼容性问题.于是我参考了一些博文(链接找不到 ...

  4. OneThink实现多图片批量上传功能

    OneThink原生系统中的图片上传功能是uploadify.swf插件进行上传的,默认是只能上传一张图片的,但是uploadify.swf是支持多图片批量上传的,那么我们稍加改动就可实现OneThi ...

  5. PHP语言学习之php做图片上传功能

    本文主要向大家介绍了PHP语言学习之php做图片上传功能,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 今天来做一个图片上传功能的插件,首先做一个html文件:text.php < ...

  6. ASP.NET MVC4实现TinyMCE 4.0.20自定义上传功能

    tinymce 插件不提供免费的本地图片上传功能,所以自己将uploadify这个上传插件整合到tinymce,实现本地上传,还用到了jquery.ui插件,先展示全部的代码 @model TinyM ...

  7. PHP 文件上传功能

    <?php /** * TestGuest Version1.0 * ================================================ * Web:2955089 ...

  8. 使用ThinkPHP+Uploadify实现图片上传功能

    首先,将下载的Uploadify压缩包解压放到公共文件夹内.实现代码如下: 前台html部分: <script src="/uploadify/jquery.min.js" ...

  9. Spring+SpringMVC+MyBatis+easyUI整合优化篇(七)图片上传功能

    日常啰嗦 前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合优化篇(六)easyUI与富文本编辑器UEditor整合>讲了富文本编辑器UEditor的整合与使用 ...

随机推荐

  1. webpack 应用笔记

    1.https://segmentfault.com/a/1190000006178770 2. 组件介绍 01.webpack.prod.conf.js 在生产时 new webpack.optim ...

  2. 关于Encode in UTF-8 without BOM

    定义BOM(Byte Order Mark),字节顺序标记,出现在文本文件头部,Unicode编码标准中用于标识文件是采用哪种格式的编码.它的编码是FEFF. 说明 在 UTF-8 文件中放置 BOM ...

  3. MySQL master-slave主从复制环境搭建初试

    环境为centos 7.2+mysql 5.7,网上教程很多,原理也不复杂(深知自己踩的坑还不够) 正常情况下,配置起来比较简单.另外,根据个人感受,MySQL的复制感觉要比SQL Server的复制 ...

  4. servlet3.1

    Servlet3.1新增的新特性强制更改sessionId 由HttpServletRequest 的changeSessionId()方法实现 非阻塞式IO 非阻塞式IO我们应该知道Servlet底 ...

  5. 框架和内嵌框架--->frameset 和 iframe 的文档对象

    框架和内嵌框架分别用 HTMLFrameElemnt 和 HTMLIFrameElement 表示,它们在 DOM2 中有一个新属性----->contentDocument,是一个指针,表示框 ...

  6. Java虚拟机 内存区域划分

    (图片来自https://www.cnblogs.com/whgk/p/6138522.html) 先从线程私有区开始介绍 虚拟机栈 Java虚拟机栈是由一个个栈帧组成的,当一个方法被调用时,代表这个 ...

  7. python动态模块导入

    首先创建一个模块目录lib,然后在目录内创建一个模块为:aa.py 官方推荐: import importlib aa = importlib.import_module('lib.aa') c = ...

  8. vue的条件渲染和列表渲染介绍

    一.条件渲染 1.v-if语句 <div v-if="seen">hahahah</div> <!-- v-if插入或者删除元素的指令 --> ...

  9. 452. Minimum Number of Arrows to Burst Balloons扎气球的个数最少

    [抄题]: There are a number of spherical balloons spread in two-dimensional space. For each balloon, pr ...

  10. 187. Repeated DNA Sequences重复的DNA子串序列

    [抄题]: All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: &qu ...