js 可增加删除图片上传框js代码
js 可增加删除图片上传框js代码
本款程序可以检测用户上传图片类型,大小,在上传之前,同时也可以增加多文件上传,就是不定文件多少,仿51空间那种文件上代码
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>图片预览效果</title>
<script src="CJL.0.1.min.js"></script>
<script src="QuickUpload.js"></script>
<script >
var ImagePreview = function (file, img, options) { this.file = $$(file); //文件对象 this.img = $$(img); //预览图片对象 this._preload = null; //预载图片对象 this._data = ""; //图像数据 this._upload = null; //remote模式使用的上传文件对象 var opt = this._setOptions(options); this.action = opt.action; this.timeout = opt.timeout; this.ratio = opt.ratio; this.maxWidth = opt.maxWidth; this.maxHeight = opt.maxHeight; this.onCheck = opt.onCheck; this.onShow = opt.onShow; this.onErr = opt.onErr; //设置数据获取程序 this._getData = this._getDataFun(opt.mode); //设置预览显示程序 this._show = opt.mode !== "filter" ? this._simpleShow : this._filterShow; }; //根据浏览器获取模式 ImagePreview.MODE = $$B.ie7 || $$B.ie8 ? "filter" : $$B.firefox ? "domfile" : $$B.opera || $$B.chrome || $$B.safari ? "remote" : "simple"; //透明图片 ImagePreview.TRANSPARENT = $$B.ie7 || $$B.ie6 ? "mhtml:" + document.scripts[document.scripts.length - 1].getAttribute("src", 4) + "!blankImage" : "data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="; ImagePreview.prototype = { //设置默认属性 _setOptions : function (options) { this.options = { //默认值 mode : ImagePreview.MODE, //预览模式 ratio : 0, //自定义比例 maxWidth : 0, //缩略图宽度 maxHeight : 0, //缩略图高度 onCheck : function () {}, //预览检测时执行 onShow : function () {}, //预览图片时执行 onErr : function () {}, //预览错误时执行 //以下在remote模式时有效 action : undefined, //设置action timeout : 0 //设置超时(0为不设置) }; return $$.extend(this.options, options || {}); }, //开始预览 preview : function () { if (this.file && false !== this.onCheck()) { this._preview(this._getData()); } }, //根据mode返回数据获取程序 _getDataFun : function (mode) { switch (mode) { case "filter": return this._filterData; case "domfile": return this._domfileData; case "remote": return this._remoteData; case "simple": default: return this._simpleData; } }, //滤镜数据获取程序 _filterData : function () { this.file.select(); try { return document.selection.createRange().text; } finally { document.selection.empty(); } }, //domfile数据获取程序 _domfileData : function () { return this.file.files[0].getAsDataURL(); }, //远程数据获取程序 _remoteData : function () { this._setUpload(); this._upload && this._upload.upload(); }, //一般数据获取程序 _simpleData : function () { return this.file.value; }, //设置remote模式的上传文件对象 _setUpload : function () { if (!this._upload && this.action !== undefined && typeof QuickUpload === "function") { var oThis = this; this._upload = new QuickUpload(this.file, { onReady : function () { this.action = oThis.action; this.timeout = oThis.timeout; var parameter = this.parameter; parameter.ratio = oThis.ratio; parameter.width = oThis.maxWidth; parameter.height = oThis.maxHeight; }, onFinish : function (iframe) { try { oThis._preview(iframe.contentWindow.document.body.innerHTML); } catch (e) { oThis._error("remote error"); } }, onTimeout : function () { oThis._error("timeout error"); } }); } }, //预览程序 _preview : function (data) { //空值或相同的值不执行显示 if (!!data && data !== this._data) { this._data = data; this._show(); } }, //设置一般预载图片对象 _simplePreload : function () { if (!this._preload) { var preload = this._preload = new Image(), oThis = this; preload.onload = function () { oThis._imgShow(oThis._data, this.width, this.height); }; preload.onerror = function () { oThis._error(); }; } }, //一般显示 _simpleShow : function () { this._simplePreload(); this._preload.src = this._data; }, //设置滤镜预载图片对象 _filterPreload : function () { if (!this._preload) { var preload = this._preload = document.createElement("div"); //隐藏并设置滤镜 $$D.setStyle(preload, { width : "1px", height : "1px", visibility : "hidden", position : "absolute", left : "-9999px", top : "-9999px", filter : "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='image')" }); //插入body var body = document.body; body.insertBefore(preload, body.childNodes[0]); } }, //滤镜显示 _filterShow : function () { this._filterPreload(); var preload = this._preload, data = this._data.replace(/[)'"%]/g, function (s) { return escape(escape(s)); }); try { preload.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = data; } catch (e) { this._error("filter error"); return; } //设置滤镜并显示 this.img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale',src=" " + data + " ")"; this._imgShow(ImagePreview.TRANSPARENT, preload.offsetWidth, preload.offsetHeight); }, //显示预览 _imgShow : function (src, width, height) { var img = this.img, style = img.style, ratio = Math.max(0, this.ratio) || Math.min(1, Math.max(0, this.maxWidth) / width || 1, Math.max(0, this.maxHeight) / height || 1); //设置预览尺寸 style.width = Math.round(width * ratio) + "px"; style.height = Math.round(height * ratio) + "px"; //设置src img.src = src; this.onShow(); }, //销毁程序 dispose : function () { //销毁上传文件对象 if (this._upload) { this._upload.dispose(); this._upload = null; } //销毁预载图片对象 if (this._preload) { var preload = this._preload, parent = preload.parentNode; this._preload = preload.onload = preload.onerror = null; parent && parent.removeChild(preload); } //销毁相关对象 this.file = this.img = null; }, //出错 _error : function (err) { this.onErr(err); } }
</script>
</head>
<body>
<style>
.perview {width:600px;background:#fff;font-size:12px; border-collapse:collapse;}
.perview td, .perview th {padding:5px;border:1px solid #ccc;}
.perview th {background-color:#f0f0f0; height:20px;}
.perview a:link, .perview a:visited, .perview a:hover, .perview a:active {color:#00F;}
.perview table{ width:100%;border-collapse:collapse;}
</style>
<table border="0" class="perview">
<tr>
<th>选择文件</th>
<th width="50%">预览图</th>
</tr>
<tr>
<td height="200"><input id="idFile" name="pic" type="file" /></td>
<td align="center"><img id="idImg" /></td>
</tr>
</tbody>
</table>
<script>
var ip = new ImagePreview( $$("idFile"), $$("idImg"), {
maxWidth: 200, maxHeight: 200, action: "ImagePreview.ashx"
});
ip.img.src = ImagePreview.TRANSPARENT;
ip.file.onchange = function(){ ip.preview(); };
</script>
<br />
<style>
/*file样式*/
#idPicFile {
width:80px;height:20px;overflow:hidden;position:relative;
background:url(http://www.cnblogs.com/images/cnblogs_com/cloudgamer/169629/o_addfile.jpg) center no-repeat;
}
#idPicFile input {
font-size:20px;cursor:pointer;
position:absolute;right:0;bottom:0;
filter:alpha(opacity=0);opacity:0;
outline:none;hide-focus:expression(this.hideFocus=true);
}
</style>
<table class="perview">
<tr>
<th align="right"> 选择图片: </th>
<td width="75%"> <div id="idPicFile"> </div> </td>
</tr>
<tr>
<td colspan="2"><table>
<thead>
<tr>
<th> 文件路径 </th>
<th width="30%"> 预览图 </th>
<th width="20%"> 操作 </th>
</tr>
</thead>
<tbody id="idPicList">
<tr>
<td></td>
<td align="center"></td>
<td align="center"><a href="#">移除</a></td>
</tr>
</tbody>
</table></td>
</tr>
</table>
<script>
var table = $$("idPicList"), model = table.removeChild(table.rows[0]);
function AddPreview() { var file = document.createElement("input"), img = document.createElement("img"), ip = new ImagePreview(file, img, { maxWidth : 150, maxHeight : 100, action : "ImagePreview.ashx", onErr : function () { alert("载入预览出错!"); ResetFile(file); }, onCheck : CheckPreview, onShow : ShowPreview }); file.type = "file"; file.name = "pic"; file.onchange = function () { ip.preview(); }; $$("idPicFile").appendChild(file); } //检测程序 var exts = "jpg|gif|bmp", paths = "|"; function CheckPreview() { var value = this.file.value, check = true; if (!value) { check = false; alert("请先选择文件!"); } else if (!RegExp(".(?:" + exts + ")$$", "i").test(value)) { check = false; alert("只能上传以下类型:" + exts); } else if (paths.indexOf("|" + value + "|") >= 0) { check = false; alert("已经有相同文件!"); } check || ResetFile(this.file); return check; } //显示预览 function ShowPreview() { var row = table.appendChild(model.cloneNode(true)), file = this.file, value = file.value, oThis = this; row.appendChild(file).style.display = "none"; row.cells[0].innerHTML = value; row.cells[1].appendChild(this.img); row.getElementsByTagName("a")[0].onclick = function () { oThis.dispose(); table.removeChild(row); paths = paths.replace(value, ""); return false; }; paths += value + "|"; AddPreview(); } AddPreview(); function ResetFile(file) { file.value = ""; //ff chrome safari if (file.value) { if ($$B.ie) { //ie with (file.parentNode.insertBefore(document.createElement('form'), file)) { appendChild(file); reset(); removeNode(false); } } else { //opera file.type = "text"; file.type = "file"; } } }
</script>
</body>
</html>
文章链接:http://www.phprm.com/code/5a436baeb4b84586106bcd64a33c1855.html
随便收藏,请保留本文地址!