查考链接
jquery多图片上传预览demo效果示例(整理)
实现jquery双击图片放大
两个示例中的代码合并在一起就可以实现图片上传并放大预览,但我的示例中文件必须上传到后台,返回图片的路径后才能实现放大预览功能。
代码中将需要上传的部分给注释掉了,如果需要完整的功能这需要有一个文件上传接口,同时需要接口返回文件名以及文件路径(放在浏览器中可以直接打开的),现在仅可以实现图片显示出来无法放大。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>jquery多图片上传预览</title>
<script src="http://libs.baidu.com/jquery/1.11.3/jquery.min.js"></script>
<style>
.imageDiv {
display: inline-block;
width: 160px;
height: 130px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
border: 1px dashed darkgray;
background: #f8f8f8;
position: relative;
overflow: hidden;
margin: 10px
}
.cover {
position: absolute;
z-index: 1;
top: 0;
right: 0;
width:30px;
height:30px;
/* background-color: red; */
/* display: none; */
text-align: center;
cursor: pointer;
color: #fff;
}
.coverr {
position: absolute;
z-index: 1;
top: 0;
left: 0;
width: 100%;
height: 130px;
/* background-color: rgba(0, 0, 0, .3); */
/* display: none; */
line-height: 125px;
text-align: center;
cursor: pointer;
}
.cover .delbtn {
font-size: 14px;
}
.coverr.look {
color: red;
font-size: 20px;
}
.imageDiv .coverr i {
display: none;
color: gainsboro;
}
.imageDiv .cover i {
color: black;
}
.imageDiv:hover .cover {
display: block;
}
.imageDiv:hover .coverr {
/* display: block; */
background-color: rgba(0, 0, 0, .3);
}
.imageDiv .coverr i{
display: none;
}
.imageDiv .coverr:hover i{
display: block;
}
.addImages {
display: inline-block;
width: 160px;
height: 130px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
border: 1px dashed darkgray;
background: #f8f8f8;
position: relative;
overflow: hidden;
margin: 10px;
}
.text-detail {
margin-top: 40px;
text-align: center;
}
.text-detail span {
font-size: 40px;
}
.file {
position: absolute;
top: 0;
left: 0;
width: 160px;
height: 130px;
opacity: 0;
}
</style>
</head>
<body>
<form method="post" action="" id="passForm" enctype="multipart/form-data" multipart="">
<div id="outerdiv" style="position: fixed; top: 0; left: 0; background: rgba(0,0,0,0.7); z-index: 2; width: 100%; height: 100%; display: none;">
<div id="innerdiv" style="position: absolute;">
<img id="bigimg" style="border: 5px solid #fff;" src="" />
</div>
</div>
<!--点击预览图片-->
<div id="Pic_pass">
<p><span style="color: red">注:每张照片大写不可超过4M,且最多可以传十张</span></p>
<div class="picDiv">
<div class="addImages">
<!--multiple属性可选择多个图片上传-->
<input type="file" class="file" id="fileInput" multiple="" accept="image/png, image/jpeg, image/gif, image/jpg">
<div class="text-detail">
<span>+</span>
<p>点击上传</p>
</div>
</div>
</div>
</div>
<div class="msg" style="display: none;"></div>
</form>
<script>
$("#fileInput").change(function() {
//获取选择图片的对象
var docObj = $(this)[0];
var picDiv = $(this).parents(".picDiv");
UploadPreview(docObj,picDiv);
});
//图片上传预览功能
var userAgent = navigator.userAgent; //用于判断浏览器类型
function UploadPreview(docObj,picDiv) {
//得到所有的图片文件
var fileList = docObj.files;
//循环遍历
for (var i = 0; i < fileList.length; i++) {
var data= new FormData();
var file= fileList[i];
//photoTypez 定义上传图片文件夹类型 上传文件,将代码打开
// comm.partAccessURL为后台url
//result.fileName 后台返回的图片名称
//file.name 文件上传时的名称
// var pType = photoTypez;
// data.append('file',docObj.files[i]);
// if(pType != null && pType != '' && pType != undefined){
// data.append('type',pType);
// }else{
// data.append('type',0);
// }
// comm.postAjaxFileAsync("/api/common/uploadByType", data, function (result) {
// //动态添加html元素
// var picHtml = "<div class='imageDiv' id='div"+file.name+"'> <img id='img" + file.name +
// "' name='" + result.fileName + "' /> "+
// "<div class='coverr'><i class='look' onclick=\"Big(\'" +comm.partAccessURL+"/api" + result.fileName +"\')\" >查看</i></div>"+
// "<div class='cover'><i class='delbtn' onclick=\"delct(\'div" + file.name +"\')\" >X</i></div></div>";
// picDiv.prepend(picHtml);
// var imgObjPreview = document.getElementById("img" + file.name);
// if (fileList && file) {
// //图片属性
// imgObjPreview.style.display = 'block';
// imgObjPreview.style.width = '160px';
// imgObjPreview.style.height = '130px';
// //imgObjPreview.src = docObj.files[0].getAsDataURL();
// //火狐7以上版本不能用上面的getAsDataURL()方式获取,需要以下方式
// if (userAgent.indexOf('MSIE') == -1) {
// //IE以外浏览器
// imgObjPreview.src = window.URL.createObjectURL(file); //获取上传图片文件的物理路径;
// // console.log(imgObjPreview.src);
// // var msgHtml = '<input type="file" id="fileInput" multiple/>';
// } else {
// //IE浏览器
// if (docObj.value.indexOf(",") != -1) {
// var srcArr = docObj.value.split(",");
// imgObjPreview.src = srcArr[i];
// } else {
// imgObjPreview.src = docObj.value;
// }
// }
// }
// });
//不将图片文件上传到后台,用于测试使用,如果要用到项目中并且保存图片请使用上面代码
//使用这个就无法使用预览功能,因为图片上的属性没有可以直接打开的连接
var picHtml = "<div class='imageDiv' > <img id='img" + fileList[i].name +
"' /><div class='coverr'><i class='look' onclick=\"Big(this)\" >查看</i></div><div class='cover'><i class='delbtn'>X</i></div></div>";
console.log(picHtml);
picDiv.prepend(picHtml);
//获取图片imgi的对象
var imgObjPreview = document.getElementById("img" + fileList[i].name);
if (fileList && fileList[i]) {
//图片属性
imgObjPreview.style.display = 'block';
imgObjPreview.style.width = '160px';
imgObjPreview.style.height = '130px';
//imgObjPreview.src = docObj.files[0].getAsDataURL();
//火狐7以上版本不能用上面的getAsDataURL()方式获取,需要以下方式
if (userAgent.indexOf('MSIE') == -1) {
//IE以外浏览器
imgObjPreview.src = window.URL.createObjectURL(docObj.files[i]); //获取上传图片文件的物理路径;
console.log(imgObjPreview.src);
// var msgHtml = '<input type="file" id="fileInput" multiple/>';
} else {
//IE浏览器
if (docObj.value.indexOf(",") != -1) {
var srcArr = docObj.value.split(",");
imgObjPreview.src = srcArr[i];
} else {
imgObjPreview.src = docObj.value;
}
}
}
}
}
function htmlPut(result) {
}
function delct(id) {
document.getElementById(id).remove();
}
function Big(obj) {
imgShow("#outerdiv", "#innerdiv", "#bigimg", obj);
}
//使用后台文件上传是使用这个方法
function imgShow(outerdiv, innerdiv, bigimg, obj) {
var src = obj;//获取图片路径
$(bigimg).attr("src", src);//设置#bigimg元素的src属性
/*获取当前点击图片的真实大小,并显示弹出层及大图*/
// $("<img/>").attr("src", src).load(function () {
var windowW = $(window).width();//获取当前窗口宽度
var windowH = $(window).height();//获取当前窗口高度
console.log("当前窗口宽度" + windowW + "当前窗口高度" + windowH);
// var realWidth = this.width;//获取图片真实宽度
// var realHeight = this.height;//获取图片真实高度
var realWidth = 160;//获取图片真实宽度
var realHeight = 130;//获取图片真实高度
var imgWidth, imgHeight;
var scale = 0.8;//缩放尺寸,当图片真实宽度和高度大于窗口宽度和高度时进行缩放
if (realHeight > windowH * scale) {//判断图片高度
imgHeight = windowH * scale;//如大于窗口高度,图片高度进行缩放
imgWidth = imgHeight / realHeight * realWidth;//等比例缩放宽度
if (imgWidth > windowW * scale) {//如宽度扔大于窗口宽度
imgWidth = windowW * scale;//再对宽度进行缩放
}
} else if (realWidth > windowW * scale) {//如图片高度合适,判断图片宽度
imgWidth = windowW * scale;//如大于窗口宽度,图片宽度进行缩放
imgHeight = imgWidth / realWidth * realHeight;//等比例缩放高度
} else {//如果图片真实高度和宽度都符合要求,高宽不变
// imgWidth = realWidth*3;
// imgHeight = realHeight*3;
imgWidth = windowW * scale;
imgHeight = windowH * scale;
}
$(bigimg).css("width", imgWidth);//以最终的宽度对图片缩放
$(bigimg).css("height", imgHeight);//以最终的高度度对图片缩放
var w = (windowW - imgWidth) / 2;//计算图片与窗口左边距
var h = (windowH - imgHeight) / 2;//计算图片与窗口上边距
$(outerdiv).css("z-index",9999);
$(innerdiv).css({ "top": h, "left": w });//设置#innerdiv的top和left属性
$(outerdiv).fadeIn("fast");//淡入显示#outerdiv及.pimg
// });
$(outerdiv).click(function () {//再次点击淡出消失弹出层
$(this).fadeOut("fast");
});
}
</script>
</body>
</html>
保存获取图片的路径
var pictures=[];
var picDiv = $(".addImages");
var images =picDiv.prevObject[0].images;
//images为数组类型,下标直接取就可以
回显图片,在显示数据的同时将图片存储的路径名获取到循环显示
//pictures 为图片路径的数组
//comm.partAccessURL为后台的url
var picDiv = $("#fileInput").parents(".picDiv");
for (let i = 0; i < pictures.length; i++) {
var picHtml = "<div class='imageDiv' id='div"+pictures[i]+"'> <img id='img" + pictures[i] +
"' name='"+ pictures[i] +"' src='"+comm.partAccessURL+"/api" + pictures[i] +"' width='100%' height='100%' /> "+
"<div class='coverr'><i class='look' onclick=\"Big(\'" + comm.partAccessURL+"/api" + pictures[i] +"\')\" >查看</i></div>"+
"<div class='cover'><i class='delbtn' onclick=\"delct(\'div" + pictures[i] +"\')\">x</i></div></div>";
picDiv.prepend(picHtml);
}