zoukankan      html  css  js  c++  java
  • 多图片上传插件

    最近项目需要用到图片上传插件,所以自己动手写了一个

    //html代码

    <div class="file-box">
    	<div class="file-btn">
    		选择图片
    		<input type="file" name="file" id="file" value="" multiple />
    	</div>
    </div>
    
    <div class="submit">确认</div>
    

    //  multiple属性是可选的,表示是否可以多个文件一起上传

    //  accept="image/*" 表示检索的文件只能是图片,在input中没有加入这个属性原因是,文件很大很多时筛选出是图片文件这个过程等待的时间太长,所以没有加上

    而是,在上传的过程做文件类型的判断,如果是图片就上传,不是则返回不上传

    //css样式

    .file-box {
    	display: block;
    	 auto;
    	height: auto;
    }
    .file-btn {
    	position: relative;
    	display: inline-block;
    	background: #1E88C7;
    	border: 1px solid #1E88C7;
    	border-radius: 4px;
    	padding: 4px 7px;
    	overflow: hidden;
    	color: #fff;
    	line-height: 20px;
    	cursor: pointer;
    }
    .file-btn input {
    	position: absolute;
    	font-size: 16px;
    	right: 0;
    	top: 0;
    	opacity: 0;
    	cursor: pointer;
    }
    .submit {
    	 80px;
    	height: 30px;
    	line-height: 30px;
    	border-radius: 6px;
    	background-color: #f90;
    	color: #fff;
    	font-size: 16px;
    	text-align: center;
    }
    .zk-addImg {
    	height: 40px;
    	 350px;
    	margin: 10px;
    	padding: 10px;
    	background-color: #eee;
    	font-size: 14px;
    }
    .upload-progress {
    	background-color: #E5E5E5;
    	margin-top: 10px;
    	 100%;
    }
    .upload-progress-bar {
    	background-color: #0099FF;
    	height: 3px;
    	 1px;
    }
    

     //效果 

      

    //重点来了,js实现图片上传

    (function (Global, $) {
    	var uploadCallback = function (defaults) {
    		var file = document.getElementById("file");
    		var arrdata = [];
    		//绑定点击确认按钮事件
    		$('.submit').click(function () {
    			defaults.callback(arrdata);
    		});
    
    		file.onchange = function () {
    			//获取的图片文件
    			var fileList = file.files;
    			fileList = Array.prototype.slice.call(fileList);
    
    			var arrFile = [];
    			//遍历获取到得图片文件
    			fileList.forEach(function (ele, index) {
    				var imgType = ele.type.split("/")[0];
    				if (imgType != "image") {
    					alert("所选 '" + ele.name + "' 文件类型不正确");
    				} else {
    					var size = ele.size; //注意,这里读到的是字节数
    					var isAllow = false;
    					if (!size) isAllow = false;
    					var maxSize = defaults.maxFileSize;
    					isAllow = size <= maxSize;
    					if (isAllow) {
    						arrFile.push(ele);
    					} else {
    						alert("所选 '" + ele.name + "' 文件大小超过限制");
    					}
    				}
    			});
    			file.value = null;
    			arrFile.forEach(function (file, index) {
    				var sizeKb = Math.floor(((file.size / 1024) * 100)) / 100; //转换成kb
    				//upload
    				var oMyForm = new FormData();
    				oMyForm.append('Filedata', file);
    				var oReq = new XMLHttpRequest();
    				oReq.responseType = "json";
    				oReq.onload = function (e) {
    					//服务器返回的地址
    					//console.log(this.response.data[0]);
    					var stat = this.response.stat;
    					if (stat == 1) {
    						var imgUrl = this.response.data[0]
    						arrdata[index] = imgUrl;
    						defaults.loadCall(e);
    						arrFile = null;
    					} else {
    						alert(this.response.msg);
    					}
    				};
    				//存放图片的父级元素
    				var imgContainer = document.getElementsByClassName("file-box")[0];
    				//重现
    				var span = document.createElement("span");
    				span.setAttribute('class', 'file-name');
    				span.innerHTML = file.name;
    
    				var spanEnd = document.createElement('span');
    
    				var progress = document.createElement('div');
    				progress.setAttribute('class', 'upload-progress');
    				var progress_bar = document.createElement('div');
    				progress_bar.setAttribute('class', 'upload-progress-bar');
    				progress.appendChild(progress_bar);
    
    				var imgAdd = document.createElement("div");
    				imgAdd.setAttribute("class", "zk-addImg");
    				imgAdd.appendChild(span);
    				imgAdd.appendChild(spanEnd);
    				imgAdd.appendChild(progress);
    				imgContainer.appendChild(imgAdd);
    
    				oReq.upload.onprogress = function (e) {
    					//console.log('进度信息=>', e);
    					var difpropress = (e.loaded / e.total) * 100;
    					progress_bar.style.width = difpropress + "%";
    					spanEnd.innerHTML = '(' + sizeKb + 'kb)' + ' - Complete';
    				}
    				oReq.open("POST", "upload.php?type=img");
    				oReq.send(oMyForm);
    			});
    		};
    	};
    	//init
    	var zkImgMonitor = {};
    	Global.zkImgMonitor = {
    		init: function (options) {
    			var defaults = {
    				//最大图片尺寸
    				maxFileSize: 2000,
    				loadCall: function () {},
    				callback: function (data) {}
    			};
    			$.extend(defaults, options);
    			uploadCallback(defaults);
    		}
    	};
    
    })(window, window.jQuery);  

    //在html上绑定插件

    <script>
    	zkImgMonitor.init({
    		//最大图片尺寸
    		maxFileSize: 200000,
    		//超出图片大小的提示文字
    		tipsText: "",
    		loadCall: function(data) {
    			console.log('上传完成的单张图数据 => ', data);
    		},
    		callback: function(data) {
    			console.log('点击确认按钮后返回的数据 => ', data);
    		}
    	});
    </script>
    

      

  • 相关阅读:
    随笔
    json对象的默认排序问题
    SQl死锁随想
    疑惑
    .netportal
    WCF中出现方法出现无法匹配的异常
    自动播放图片,可以调整速度。
    一个二级树形菜单,初始显示为全部展开,适用于分类较少的情况。
    整理了一下以后需要用的软件
    缩略图,大图,同页显示
  • 原文地址:https://www.cnblogs.com/xiaosuibu/p/6895832.html
Copyright © 2011-2022 走看看