1. 程式人生 > >h5多圖片上傳

h5多圖片上傳

做了一個h5多圖片上傳

只要瞭解了 基本原理,那就很好理解了,可以看看註釋或者在網上找找原理

<!doctype html>
<html>

	<head>
		<meta charset="UTF-8">
		<title></title>
		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
		<link href="../css/mui.min.css" rel="stylesheet" />
		<style type="text/css">
			.wt{
				border-bottom: 1px solid #C0C0C0;
				border-top: 1px solid #C0C0C0;
				padding: 20px;
			}
			.wt>div:first-child{
				padding-bottom: 10px;
			}
			.lx{
				padding: 20px;
				border-bottom: 1px solid #C0C0C0;
			}
			.img{
				padding: 20px;
			}
			
			.pb10{
				padding-bottom: 10px;
			}
		
.imglist{
	width: 100%;
	display: flex;
	justify-content: flex-start;
	align-items: center;
}
.imgcss{
	width: 5rem;
	height: 5rem;
	border: 2px solid #CCCCCC;
	margin-right: 1em;
	position: relative;
}
.imgcss img{
	width: 100%;
	height: 100%;
}
.addcss{
	width: 5rem;
	height: 5rem;
	border: 2px solid #CCCCCC;
	background:#fff;
	position:relative;
}
.addcss > input{
	position:relative;
    opacity: 0;
    display: block;
    height: 100%;
    width: 100%;
    z-index:998;
}
.addcss>span{
	text-align:center;
    width:2rem;
    height:2rem;
    font-size:3rem;
    margin:auto;
    position:absolute;
    top:0;
    left:0;
    bottom:0;
    right:0;
    z-index:5;
}

.guanbi{
	position: absolute;
	z-index: 99;
	top: -15%;
	left: 80%;
	border: 1px solid #C0C0C0;
	border-radius: 50%;
	background-color: white;
}
		</style>
	</head>

	<body>
		<header class="mui-bar mui-bar-nav">
		    <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
		    <h1 class="mui-title">反饋</h1>
		</header>
		
		<div class="mui-content">
			<form action="" >
		    <div class="wt">
		    	<div class="">
		    		問題與意見 
		    	</div>
		    	<div class="">
		    		<textarea name="" rows="7" cols="22"></textarea>
		    	</div>
		    </div>
		    
		    <div class="lx">
		    	<div class="mui-input-row">
		    	    <label>聯絡方式</label>
		    	    <input type="text" placeholder="微信/QQ/郵箱">
		    	</div>
		    </div>
		    
		    <div class="img">
		    	<div class="pb10">
		    		圖片(選填)
		    	</div>
		    	<div class="imglist" id="imgid">
		    		<div class="addcss" id="addcss" >
		    			<input type="file" name="file2" id="going" accept="image/*" multiple="multiple">
					    <span>+</span>
		    		</div>
		    	</div>
		    </div>
		    
		    
		   <button type="button" class="mui-btn mui-btn-blue mui-btn-block" onclick="sub">提交</button>
		   
		   </form>
		</div>
		
		<script src="../js/jquery.min.js" type="text/javascript" charset="utf-8"></script>
		<script src="../js/mui.min.js"></script>
		<script type="text/javascript">
			mui.init();
//這是用來裝圖片的陣列
			var imglist = new Array();
//主要是input的change事件,只要觸發就做處理
			$("#going").on("change",function(){
				if(typeof FileReader == undefined) {
				    console.log("不支援filereader");
				}else{

			         let input = document.getElementById("going");
			         let imgid = document.getElementById("imgid");
			         let addcss = document.getElementById("addcss");

			        for(let i=0;i<this.files.length;i++){
		                if (!input['value'].match(/.jpg|.gif|.png|.bmp/i)){  //判斷上傳檔案格式
		                    return alert("上傳的圖片格式不正確,請重新選擇") ;        
		                }
//建立一個FileReader 用於讀取檔案
                	let reader = new FileReader();
//將檔案讀取為 DataURL
                	reader.readAsDataURL(this.files[i]);
//開始新增dom
	                reader.onload = function(e){
	                    result = '<div class="guanbi mui-icon mui-icon-closeempty" onclick="remove(this)"></div><img src="'+this.result+'" alt=""/>';
//新建一個div
	                    div = document.createElement('div');
//將圖片存到數組裡面
	                    imglist.push(this.result);
	                    console.log(imglist.length);
//設定能放多少個圖片(假的)
	                    setaddcss();
//給div放樣式
	                    div.className = "imgcss";
//將html程式碼放到div裡面  樣式自己設定
	                    div.innerHTML = result;
//這裡比較關鍵
//insertBefore 是將一個元素新增到指定元素之前 addcss就是在這個元素之前新增
//div就是要新增的元素
	                    addcss.parentNode.insertBefore( div,addcss );          
	                	}
            		}
				}
		})
		function setaddcss(){
	        if(imglist.length >= 4) addcss.classList.add("mui-hidden");
            else addcss.classList.remove("mui-hidden");
		}
//刪除節點
		function remove(obj){
//用了一個jq 的index函式, 可以獲取元素下標
			let z = $('.guanbi').index(obj);
//刪除父節點,也就是上面新增的 div
			$(obj).parent().remove();
//獲取到下標,將imglist裡面的圖片也刪除
			imglist.splice(z,1);
//設定是否能新增圖片
			setaddcss();
		}
		
//下面就沒什麼了,上傳用的
		function sub(){
			if(!imgArr.length){
                    alert('請選擇要上傳的圖片');
                    return;
            }
            var form = document.querySelector('form');
            var fd = new FormData(form);
            for(var i = 0;i < imgArr.length;i++){
                fd.append('file[]',imgArr[i]);
            }
            var request = new XMLHttpRequest();
            var url = "./file_preview.php";
            request.open('post',url);
            request.send(fd);
			
		}
		
		
		</script>
	</body>

</html>