用原生JS实现多张图片上传及预览功能(兼容IE8)
最近需要做一个图片上传预览的功能(兼容IE8-11、chrome、firefox等浏览器),网上现有的文件上传组件(如webuploader)总是会遇到一些兼容性问题。于是我参考了一些博文(链接找不到了⊙o⊙…),自己用原生JS写了一个支持多张图片上传预览功能的Demo
先通过最终效果看一下功能:
上传前

点击按钮打开文件资源管理器后只会显示图片格式的文件(通过input标签accept属性过滤)

在(非IE)浏览器下支持选中多张图片同时上传(通过input标签multiple属性)(这里在JS代码中设置最多上传2张)


代码如下:
完整版Demo代码打包(包含图片)下载地址
- HTML:
<div class="pic">
<div class="uploadImage">
<input type="file" value="上传文件" id="file" accept="image/png, image/jpeg, image/gif, image/jpg" multiple/>
<p>点击上传</p>
</div>
<div class="preview">
<img src="" id="look1">
<p class="word">图片1</p>
</div>
<div class="preview">
<img src="" id="look2">
<p class="word">图片2</p>
</div>
</div>
- CSS:
.uploadImage{
display: inline-block;
vertical-align: top;
position: relative;
width: 90px;
height: 90px;
background: url("../点击上传.png") no-repeat;
background-size: cover;
text-align: center;
cursor: pointer;
}
.uploadImage p{
position: absolute;
left:0;right:0;
bottom: 10px;
font-size: 14px;
color: #999999;
}
.uploadImage input#file{
width: 100%;
height: 100%;
opacity: 0;
cursor: pointer;
}
.preview{
position: relative;
display: inline-block;
vertical-align: top;
margin-left: 10px;
width: 90px;
height: 90px;
background: #E1E6ED;
text-align: center;
}
.preview img{
position: relative;
z-index: 1;
width: 100%;
height: 100%;
}
.preview img[src=""]{
opacity:0;
filter: Alpha(0); /* 兼容IE8-9 */
}
.preview img:not([src]){
opacity:0;
filter: Alpha(0); /* 兼容IE8-9 */
}
.preview .word{
position: absolute;
left: 0;
right: 0;
top: 0;
line-height: 90px;
font-size: 14px;
color: #999999;
z-index: 0;
}
- JS:
var hasUploadedOne = false;// 已上传过1张图片
var hasUploadedTwo = false;// 已上传过2张图片
//获取到预览框
var imgObjPreview1 = document.getElementById("look1");
var imgObjPreview2 = document.getElementById("look2");
document.getElementById('file').onchange = function() {
// 若还没完成2张图片的上传
if(!hasUploadedTwo){
//获取到file的文件
var docObj = this;
//获取到文件名和类型(非IE,可一次上传1张或多张)
if(docObj.files && docObj.files[0]) {
// 一次上传了>=2张图片(只有前两张会真的上传上去)
if(docObj.files.length >= 2){
imgObjPreview1.src = window.URL.createObjectURL(docObj.files[0]);
imgObjPreview2.src = window.URL.createObjectURL(docObj.files[1]);
hasUploadedTwo = true;
}
//一次只上传了1张照片
else{
// 这是上传的第一张照片
if(!hasUploadedOne){
imgObjPreview1.src = window.URL.createObjectURL(docObj.files[0]);
hasUploadedOne = true;
}
// 这是上传的第二张照片
else{
imgObjPreview2.src = window.URL.createObjectURL(docObj.files[0]);
hasUploadedTwo = true;
}
}
}
//IE(只能一次上传1张)
else {
//使用滤镜
docObj.select();
var imgSrc = document.selection.createRange().text;
// 这是上传的第一张照片
if(!hasUploadedOne){
imgObjPreview1.src = imgSrc;
hasUploadedOne = true;
}
// 这是上传的第二张照片
else{
imgObjPreview2.src = imgSrc;
hasUploadedTwo = true;
}
document.selection.empty();
}
return true;
}
}
用原生JS实现多张图片上传及预览功能(兼容IE8)的更多相关文章
- 原生JS实现异步图片上传(预览)
效果 实现过程分为两步 1. 用户点击添加后通过 H5文件读取 FileReader对象以DataURL的格式读取图片 2. 通过FormData对象生成表单数据,通过ajax上传到后台 HTML & ...
- 一、简单的图片上传并预览功能input[file]
一.简单的图片上传并预览功能input[file] <!DOCTYPE html> <html lang="en"> <head> <me ...
- 图片上传本地预览。兼容IE7+
基于JQUERY扩展,图片上传预览插件 目前兼容浏览器(IE 谷歌 火狐) 不支持safari 预览地址:http://www.jinbanmen.com/test/1.html js代码:/**名称 ...
- input file实现多选,限制文件上传类型,图片上传前预览功能
限制上传类型 & 多选:① accept 属性只能与 <input type="file" /> 配合使用.它规定能够通过文件上传进行提交的文件类型. ② mu ...
- 原生JS实现图片上传并预览功能
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JAVA图片批量上传JS-带预览功能
这篇文章就简单的介绍一个很好用的文件上传工具,批量带预览功能.直接贴代码吧,都有注释,很好理解. HTML页面 <!DOCTYPE html> <%@ taglib prefix=& ...
- 微信小程序实现图片是上传、预览功能
本文实例讲述了微信小程序实现图片上传.删除和预览功能的方法,分享给大家供大家参考,具体如下: 这里主要介绍一下微信小程序的图片上传图片删除和图片预览 1.可以调用相机也可以从本地相册选择 2.本地实现 ...
- JavaScript 图片的上传前预览(兼容所有浏览器)
功能描述 通过 JavaScript 实现图片的本地预览(无需上传至服务器),兼容所有浏览器(IE6&IE6+.Chrome.Firefox). 实现要点 ● 对于 Chrome.Fire ...
- 上传图片,多图上传,预览功能,js原生无依赖
最近很好奇前端的文件上传功能,因为公司要求做一个支持图片预览的图片上传插件,所以自己搜了很多相关的插件,虽然功能很多,但有些地方不能根据公司的想法去修改,而且需要依赖jQuery或Bootstrap库 ...
随机推荐
- MAC & Xcode 快捷键的使用
"磨刀不费砍材工",在熟悉了MAC 和 Xcode 快捷键后一定可以帮助我们更快捷方便的开发程序 MAC 快捷键: command + Q = 退出应用程序 command + c ...
- 【Hive一】Hive安装及配置
Hive安装及配置 下载hive安装包 此处以hive-0.13.1-cdh5.3.6版本的为例,包名为:hive-0.13.1-cdh5.3.6.tar.gz 解压Hive到安装目录 $ tar - ...
- 数据库之mongodb
启动mongodb服务端 : sudo service mongod start 或者 sudo /usr/local/mongodb/bin/mongod --config /etc/mongodb ...
- Java基础—集合
一.概述 Java中的集合框架主要分为两大派别:Collection 和 Map —— 位于util包下 类的基础关系图如下(图片来自百度) 常用: List——有序可重复 Set——无序不可重复 M ...
- docker for windows 使用mssql2017
原文:docker for windows 使用mssql2017 确实有些坑,本来之前坑都踩过了,但是时间一久就忘记了,这次换电脑又都踩了一遍. 几个要点(坑): 1.docker安装时默认就好.然 ...
- 1-[并发编程]-操作系统OS
1.为什么要有操作系统 现代的计算机系统主要是由一个或者多个处理器,主存,硬盘,键盘,鼠标,显示器,打印机,网络接口及其他输入输出设备组成. 一般而言,现代计算机系统是一个复杂的系统. 其一:如果每位 ...
- unable to locate package
一.问题 在ubuntu上安装npm时 sudo apt-get install npm 出现了错误: unable to lcoate package npm 二.解决办法 更新下apt就好了 su ...
- 15-RUN vs CMD vs ENTRYPOINT
RUN.CMD 和 ENTRYPOINT 这三个 Dockerfile 指令看上去很类似,很容易混淆.本节将通过实践详细讨论它们的区别. 简单的说: RUN 执行命令并创建新的镜像层,RUN 经常用于 ...
- 第一阶段·Linux运维基础-第1章·Linux基础及入门介绍
01-课程介绍-学习流程 02-服务器硬件-详解 03-服务器核心硬件-服务器型号-电源-CPU 01-课程介绍-学习流程 1.1. 光看不练,等于白干: 1.2 不看光练,思想怠慢: 1.3 即看又 ...
- 【原创】标准HTTP请求工具类
以下是个人在项目开发过程中,总结的Http请求工具类,主要包括四种: 1.处理http POST请求[XML格式.无解压]: 2.处理http GET请求[XML格式.无解压]: 3.处理http P ...