/*
组件使用bootstrap前端框架和Lightbox v2.8.2(图片放大预览)
范例
html:
<div>
<ul id="AnnexList">
</ul>
</div>
function loadApplyAnnex() {
var thisAnnex = new loadAnnex({
annex: thisApply.Annex,
url: "Handle/Apply_Annex.ashx",
ActionFunc: "AnnexUpload",
multipart_params: { ApplyID: thisApply.ApplyBase.ApplyID },
isShowUpButton: false,
tmpl: "#tmpl_Annex",
tmplBlank: "#tmpl_AnnexBlank",
progress: { //总体进度条对象
progressObj: $("#saveModal .progress"), //进度条对象或带#的ID
fileNumObj: $("#upFileNumbers"), //显示当前正在上传第几个文件共多少个文件的对象
currentFile: $("#currentUpFile") //显示当前正在上传的文件对象
}
});
return thisAnnex;
}
*/
/*附件显示模板
<script id="{0}" type="text/x-jquery-tmpl">
<li name="pic__${rowid}" onmousemove="$(this).addClass('ItemMouseMove');"
onmouseout="$(this).removeClass('ItemMouseMove');" rowid="${rowid}" RequiredID="${reqid}"
Required="${isRequired}" sortid="${xh}" fileformat="${format}" maxsize="${maxsize}">
<table class="AnnexContent">
<tr onclick="{{if isShowPic==true}}BrowseImage(this){{else}}triggerFileSelect(this){{/if}}">
{{if isShowPic == true}}
<td class="Image Annex_Image"><img src="{{= getImgUrl(gs, thumbnail, dz)}}" /></td>
{{else}}
<td class="Image Annex_NoImg"></td>
{{/if}}
</tr>
<tr>
<td class="Annex_word">${fjmc}</td>
</tr>
<tr>
<td style="height:2px;">
<div class="progress" style="height:2px;margin-bottom:0px;">
<div class="progress-bar progress-bar-success" role="progressbar"
aria-valuenow="60" aria-valuemin="0" aria-valuemax="100"
style="width: 0%; height:2px;">
</div>
</div>
</td>
</tr>
<tr>
<td class="Annex_button">
{{if isShowPic == true}}
{{if isPic == true}}
<a name="btn_Browse_Privew" type="button" class="btn btn-link btn-sm" href="${dz}" data-lightbox="annexGroup" title="${fjmc}">查看原图</a>
{{else}}
<a name="btn_Browse_Privew" type="button" class="btn btn-link btn-sm" href="${dz}" target="_blank">下载文件</a>
{{/if}}
<button name="btn_Del" type="button" class="btn btn-link btn-sm" onclick="DelAnnex(${xh})">删除</button>
{{else}}
<button name="btn_FileSelect" type="button" class="btn btn-primary btn-sm">选择文件</button>
{{/if}}
</td>
</tr>
</table>
</li>
</script>
*/
/*空附件项模板
<script id="{0}" type="text/x-jquery-tmpl">
<li name="pic__blank" isBlank='true' onmousemove="$(this).addClass('ItemMouseMove');"
onmouseout="$(this).removeClass('ItemMouseMove');" maxsize="10485760" rowid="blank">
<table class="AnnexContent">
<tr onclick="triggerFileSelect(this)">
<td class="Image Annex_NoImg"></td>
</tr>
<tr>
<td class="Annex_word">
<div class='input-group input-group-sm' style='width: 100%'>
<span class='input-group-addon'><span class='Required'>名称</span></span>
<input name='picName_blank' type='text' class='form-control' style='width: 100%' maxlength='100' placeholder='附件名称'>
</div>
</td>
</tr>
<tr>
<td style="height:2px;">
<div class="progress" style="height:2px;margin-bottom:0px;">
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 0%; height:2px;"></div>
</div>
</td>
</tr>
<tr>
<td class="Annex_button_New">
<button name="btn_FileSelect" type="button" class="btn btn-primary btn-sm">选择文件</button>
</td>
</tr>
</table>
</li>
</script>
*/
var me;
var loadAnnex = function (opt) {
me = this;
this.setOption(opt);
$(this.option.container).html("");
//格式化annex数据对象
$.each(this.option.annex, function (n, value) {
me.option.annex[n].rowid = n;
//是否为必传附件
if (value.reqid.isEmpty())
me.option.annex[n].isRequired = false;
else
me.option.annex[n].isRequired = true;
//如果附件地址为空则不显示图片
if (value.dz.isEmpty())
me.option.annex[n].isShowPic = false;
else
me.option.annex[n].isShowPic = true;
//文件格式是否是预设的格式
if ($.inArray(value.format.toLowerCase(), me.picExt) != -1)
me.option.annex[n].isPic = true;
else
me.option.annex[n].isPic = false;
//如果有缩略图则显示
if (value.thumbnail == null || value.thumbnail.isEmpty())
me.option.annex[n].isThum = false;
else
me.option.annex[n].isThum = true;
});
$(me.option.tmpl).tmpl(me.option.annex).appendTo(me.option.container);
$(me.option.tmplBlank).tmpl().appendTo(me.option.container);
//灯箱
/*!
* Lightbox v2.8.2
* by Lokesh Dhakar
*
* More info:
* http://lokeshdhakar.com/projects/lightbox2/
*/
$(".lightbox").css("display", "none");
//初始化上传控件
$(this.option.container + " button[name='btn_FileSelect']").each(function () {
var arrLength = me.uploaderArr.length;
var tmpUp = me.init(this, arrLength);
me.uploaderArr.push(tmpUp);
});
}
loadAnnex.prototype.option = {
container: "#AnnexList",
annex: [],
url: "", //图片提交地址
ActionFunc: "AnnexUpload", //服务端接收文件的函数
multipart_params: null, //提交时需要额外加入的参数,Json格式
format: this.picExt,
tmpl: "#tmpl_Annex", //附件显示模板
tmplBlank: "#tmpl_AnnexBlank", //空附件显示模板
flash_swf_url: "../JavaScripts/Moxie.swf", //当使用flash上传时使用swf文件
silverlight_xap_url: "../JavaScripts/Moxie.xap", //当使用SilverLight上传时使用的xap文件
multi_selection: false, //允许批量上传
isShowUpButton: true, //是否显示上传文件按钮
progress: { //总体进度条对象
progressObj: null, //进度条对象或带#的ID
fileNumObj: null, //显示当前正在上传第几个文件共多少个文件的对象
currentFile: null //显示当前正在上传的文件对象
},
beforeUpload: null, //上传开始前执行的函数
complete: null //上传全部完成后执行的函数
}
//初始化上传控件
loadAnnex.prototype.init = function (btn) {
var rd;
do {
rd = parseInt(10000 * Math.random());
} while ($("#up_" + rd.toString()).length > 0)
var btnObj = $(btn);
var btnID = "btnUp_" + rd.toString();
btnObj.attr("id", btnID);
//closest向上逐层查找符合条件的父元素
var upContent = btnObj.closest('.AnnexContent');
var upObj = upContent.parent();
upObj.attr("id", "up_" +
"支持批量上传、JS图片预览的前端上传组件"所涉及的知识点主要集中在前端开发领域,尤其是文件上传和用户体验优化上。这个组件设计用于处理用户在Web应用中上传多个文件的需求,同时提供了图片预览功能,提高了用户的交互体验。 批量上传是一种常见的用户需求,尤其在处理大量图片或者文件时。这种功能通常依赖于HTML5的File API,该API允许前端JavaScript代码访问和操作本地文件。批量上传通过循环遍历用户选择的多个文件,逐个发送到服务器,或者通过分块上传技术(如chunked uploads)将大文件分割成小块进行上传,以减轻服务器压力并提高上传效率。 JS图片预览是利用HTML5的FileReader API来实现的。在用户选择文件后,不实际上传,而是读取文件内容生成数据URL,再用此URL加载到一个隐藏的`<img>`元素中,从而实现图片的预览效果。这样用户在上传前就能确认所选文件是否正确,减少了误操作的可能性。 在中提到的"js中有详细说明",这可能指的是组件的源代码注释,这对于其他开发者理解和使用这个组件至关重要。良好的代码注释可以清晰地解释代码逻辑、功能实现和使用方法,方便其他人快速上手。 至于压缩包中的文件,"AnnexUpload.js"很可能是上传组件的核心代码,实现了上传逻辑和与后端服务器的通信。"Moxie.swf"和"Moxie.xap"可能是Flash和Silverlight插件的文件,用于支持在那些不完全支持HTML5 File API的旧版浏览器上的文件上传。而"Images"目录可能包含了一些示例图片或用于组件界面的图标资源。 这个上传组件结合了HTML5的新特性,提供了批量上传和图片预览功能,适用于需要处理大量文件上传的Web应用。它的实现涉及到前端开发的多个方面,包括文件操作API、浏览器兼容性处理以及用户体验设计,对于前端开发者来说是很好的学习和参考资源。如果有人将这个组件进一步封装为完全组件化的产品,那么对于前端社区来说将是一份宝贵的贡献。





















- 1

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整

- 粉丝: 16
- 资源: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于大模型的智能对话客服工具,支持哔哩哔哩、抖音企业号、抖音、抖店、微博聊天、小红书专业号运营、小红书、知乎等平台接入,可选择 GPT3.5/GPT4.0/ ,支持基于自有知识库定制企业AI 应用
- AI大语言模型API实现的AI助手全套开源解决方案,自带运营管理后台,开箱即用 集成了OpenAI, Azure, ChatGLM,讯飞星火,文心一言等多个平台的大语言模型
- linux相关课程学习笔记
- 一款轻量级、跨平台的Mini Kubernetes AI Dashboard,支持大模型+智能体+MCP,集成多集群管理、智能分析、实时异常检测等功能,支持多架构单文件部署,助力高效集群管理与运维优化
- 基于springboot框架的健身房管理系统(完整Java源码+数据库sql文件+项目文档+Java项目编程实战+编程练手好项目).zip
- lubanxiutu.rar
- Screenshot_20250330_205240_edit_61022889027146.jpg
- 基于springboot框架的智能学习平台系统(完整Java源码+数据库sql文件+项目文档+Java项目编程实战+编程练手好项目).zip
- AI智能聊天小程序开源版本,目前支持对接阿里百炼、百度千帆文心一言、讯飞星火大模型. 基于ruoyi-vue-plus的java8版本 目前支持主要的三家厂商+本地ollama接口调用
- 采用springboot框架的基于javaweb的流浪宠物管理系统的设计与实现(完整Java源码+数据库sql文件+项目文档+Java项目编程实战+编程练手好项目).zip
- 基于springboot框架的教师工作量管理平台系统(完整Java源码+数据库sql文件+项目文档+Java项目编程实战+编程练手好项目).zip
- graph-demo.zip
- SKC智能知识库:专注于构建高效的知识管理和检索系统,利用AI技术提升信息处理效率,适用于教育、科研及企业级应用 通过大模型与知识管理的深度融合,在知识创建和检索中为用户带来智能体验
- 价值200元帝国cms7.2仿发财农业网-农机农业养殖技术帝国模板+火车头采集规则+搭建教程
- 基于springboot框架的中国民俗网在线平台(完整Java源码+数据库sql文件+项目文档+Java项目编程实战+编程练手好项目).zip
- Wordpress付费阅读付费下载支付插件,支持支付宝、微信支付、易支付,可阅读、付费分开支付


