PC或者移动端常用的上传图片

在开发app过程中我们遇到了这样的需求,要求上传身份证,评价晒图,意见反馈晒图等,还要可以单个上传和多张上传。要实现也不难,话不多少,直接上代码。

html 

<!DOCTYPE html>
<html>

<head>
	<meta charset="utf-8" />
	<title>JSS实现带删除功能可以多张图片上传预览插件</title>
	<link href="css/index.css" type="text/css" rel="stylesheet">
</head>

<body>

	<div class="img-box full">
		<div class=" img-section">
			<p class="up-p">上传图片demo:
				<span class="up-span">最多可以上传5张图片,可以单张上传也可以多张上传</span>
			</p>
			<div class="z_photo upimg-div clear">
				<div class="z_file fl">
					<img src="img/a11.png" class="add-img">
					<input type="file" name="file" id="file" class="file" value="" accept="image/jpg,image/jpeg,image/png,image/bmp" multiple
					/>
				</div>
			</div>
		</div>
	</div>
	<div class="mask works-mask">
		<div class="mask-content">
			<p class="del-p ">您确定要删除图片吗?</p>
			<p class="check-p">
				<span class="del-com wsdel-ok">确定</span>
				<span class="wsdel-no">取消</span>
			</p>
		</div>
	</div>

	<script src="js/jquery-1.8.3.min.js"></script>
	<script src="js/fileImgs.js"></script>


</body>

</html>

css


button{
	outline: none;
	border: 0px;
}
input{

	outline: none;
}
a {
	outline: none;
}
a,button{cursor:pointer;} 

body {
	background: #f4f4f4;
	font-size: 14px;
	font-family: "微软雅黑", "PingFang SC", "arial, helvetica, sans-serif";
}
.clear {
	clear: both;
}
.full{
	width: 1210px;
	min-width: 1210px;
	margin: 0 auto;
}

/* ====clear float====== */
/*nav a:visited{color: rgb(65,65,65);}
aside a:visited{color: rgb(65,65,65);}*/
.fl {
	float: left;
}
.fr {
	float: right;
}
.clear:after {
	content: '';
	display: block;
	clear: both;
}
/* reset */
.pic img{display: none;}
i,p,h1,h2,h3,h4,h5,h6,hr,br,em,dl,dd,li,ul,ol,td,th,pre,form,body,input,strong,textarea,select,figcaption,figure{
	margin: 0;
	padding: 0;
}
em {
	font-style: normal
}
li {
	list-style: none
}
a {
	text-decoration: none;
}
img {
	border: none;
	
}
table {
	border-collapse: collapse;
}
textarea {
	resize: none;
	overflow: auto;
}
a,button{cursor:pointer;} 

/* common-css */


/*上传图片插件的样式*/
.img-box{
	margin-top: 40px;
}
.img-box .up-p{
	margin-bottom: 20px;
	font-size: 16px;
	color: #555;
}
.z_photo{
	padding: 18px;
	border:2px dashed #E7E6E6;
	/*padding: 18px;*/
}
.z_photo .z_file{
	position: relative;
}
.z_file  .file{
	width: 100%;
	height: 100%;
	opacity: 0;
	position: absolute;
	top: 0px;
	left: 0px;
	z-index: 100;
}
.z_photo .up-section{
	position: relative;
	margin-right: 20px;
	margin-bottom: 20px;
	cursor: pointer;
}
.up-section .close-upimg{
	width: 48px;
	height:48px;
	position: absolute;
	top: 0px;
	right: 0px;
	display: none;
	z-index: 10;
}
.up-section .up-span{
	display: block;
	width: 100%;
	height: 100%;
	visibility: hidden;
	position: absolute;
	top: 0px;
	left: 0px;
	z-index: 9;
	background: rgba(0,0,0,.5);
}
.up-section:hover{
	border:2px solid #5bcc21;
}
.up-section:hover .close-upimg{
	display: block;
}
.up-section:hover .up-span{
	visibility: visible;
}
.z_photo .up-img{
	display: block;
	width: 100%;
	height: 100%;
}
.loading{
    border: 1px solid #D1D1D1;
	background:url(../img/loading.gif) no-repeat center;
}
.up-opcity{
	opacity: 0;
}
.img-name-p{
	display: none;
}
.upimg-div .up-section {
    width: 190px;
    height: 180px;
}
.img-box .upimg-div .z_file {
    width: 190px;
    height: 180px;
}
.z_file .add-img {
    display: block;
    width: 190px;
    height: 180px;
}
/*遮罩层样式*/
.mask{
	z-index: 1000;
	display: none;
	position: fixed;
	top: 0px;
	left: 0px;
	width: 100%;
	height: 100%;
	background: rgba(0,0,0,.4);
}
.mask .mask-content{
	width: 400px;
	position: absolute;
	top: 50%;
	left: 53%;
	margin-left: -250px;
	margin-top: -90px;
	background: #fff;
	height: 175px;
	text-align: center;
	z-index: 22;
	border-radius: 6px;
}
.mask .mask-content .del-p{
	color: #555;
	height: 110px;
	line-height: 110px;
	font-size: 18px;
	border-bottom: 1px solid #D1D1D1;
}
.mask-content .check-p{
	height: 66px;
	line-height: 66px;
	position: absolute;
	bottom: 0px;
	left: 0px;
	width: 100%;
}
.mask-content .check-p span{
	width: 49%;
	display: inline-block;
	text-align: center;
	color: #f60;
	font-size: 18px;
	cursor: pointer;
}
.check-p .del-com{
	border-right: 1px solid #D1D1D1;
}

js,记得引入jquery.js文件哦

$(function(){
	var delParent;
	var defaults = {
		fileType         : ["jpg","png","bmp","jpeg"],   // 上传文件的类型
		fileSize         : 1024 * 1024 * 10                  // 上传文件的大小 10M
	};
		/*点击图片的文本框*/
	$(".file").change(function(){	 
		var idFile = $(this).attr("id");
		var file = document.getElementById(idFile);
		var imgContainer = $(this).parents(".z_photo"); //存放图片的父亲元素
		var fileList = file.files; //获取的图片文件
		var input = $(this).parent();//文本框的父亲元素
		var imgArr = [];
		//遍历得到的图片文件
		var numUp = imgContainer.find(".up-section").length;
		var totalNum = numUp + fileList.length;  //总的数量
		if(fileList.length > 5 || totalNum > 5 ){
			alert("上传图片数目不可以超过5个,请重新选择");  //一次选择上传超过5个 或者是已经上传和这次上传的到的总数也不可以超过5个
		}
		else if(numUp < 5){
			fileList = validateUp(fileList);
			for(var i = 0;i<fileList.length;i++){
			 var imgUrl = window.URL.createObjectURL(fileList[i]);
			     imgArr.push(imgUrl);
			 var $section = $("<section class='up-section fl loading'>");
			     imgContainer.prepend($section);
			 var $span = $("<span class='up-span'>");
			     $span.appendTo($section);
			
		     var $img0 = $("<img class='close-upimg'>").on("click",function(event){
				    event.preventDefault();
					event.stopPropagation();
					$(".works-mask").show();
					delParent = $(this).parent();
				});   
				$img0.attr("src","img/closeBtn-1.png").appendTo($section);
		     var $img = $("<img class='up-img up-opcity'>");
		         $img.attr("src",imgArr[i]);
		         $img.appendTo($section);
		     var $p = $("<p class='img-name-p'>");
		         $p.html(fileList[i].name).appendTo($section);
		     var $input = $("<input id='taglocation' name='taglocation' value='' type='hidden'>");
		         $input.appendTo($section);
		     var $input2 = $("<input id='tags' name='tags' value='' type='hidden'/>");
		         $input2.appendTo($section);
		      
		   }
		}
		setTimeout(function(){
             $(".up-section").removeClass("loading");
		 	 $(".up-img").removeClass("up-opcity");
		 },450);
		 numUp = imgContainer.find(".up-section").length;
		if(numUp >= 5){
			$(this).parent().hide();
		}
	});
	
	
   
    $(".z_photo").delegate(".close-upimg","click",function(){
     	  $(".works-mask").show();
     	  delParent = $(this).parent();
	});
		
	$(".wsdel-ok").click(function(){
		$(".works-mask").hide();
		var numUp = delParent.siblings().length;
		if(numUp < 6){
			delParent.parent().find(".z_file").show();
		}
		 delParent.remove();
	});
	
	$(".wsdel-no").click(function(){
		$(".works-mask").hide();
	});
		
		function validateUp(files){
			var arrFiles = [];//替换的文件数组
			for(var i = 0, file; file = files[i]; i++){
				//获取文件上传的后缀名
				var newStr = file.name.split("").reverse().join("");
				if(newStr.split(".")[0] != null){
						var type = newStr.split(".")[0].split("").reverse().join("");
						console.log(type+"===type===");
						if(jQuery.inArray(type, defaults.fileType) > -1){
							// 类型符合,可以上传
							if (file.size >= defaults.fileSize) {
								alert(file.size);
								alert('您这个"'+ file.name +'"文件大小过大');	
							} else {
								// 在这里需要判断当前所有文件中
								arrFiles.push(file);	
							}
						}else{
							alert('您这个"'+ file.name +'"上传类型不符合');	
						}
					}else{
						alert('您这个"'+ file.name +'"没有类型, 无法识别');	
					}
			}
			return arrFiles;
		}
		
	
	
})

下面可以来看看效果预览哦

as

aa

这样就实现了,主要用到的:

1.就是input的属性“file”,这个可以传1张,如果我们要多传几张就要用到multiple这个属性;

2.就是把input的透明度(opacity=0);借助一张图片或者一个元素上传,其实点击的本事是input,只不过用户看不到而已;

3.限制上传图片的数量,不能无限上传,给服务器造成压力;

4.添加删除按钮,可以随时更换,或者取消操作;

5.判断上传的文件的格式是否符合图片的格式,看后缀名是否是jpg/jpeg/png/bmp这几个;

由于时间有限,暂且搁笔,写的不深,还望朋友们提出宝贵意见,一起进步,谢谢!

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值