`
jjjssh
  • 浏览: 77092 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

图片上传前端拖拽排序+支持多选择图片

阅读更多
没事写了前端控件
支持选择多张图片
拖拽排序

缺点就是需要用base64上传,本来是想用二进制数据上传的,因为base64上传,如果是大图片的话,会很慢,且有些服务器是不支持传很长的字符的

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>拖拽demo</title>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<style type="text/css">
#container {
	width:100%;
	white-space:nowrap;
	padding:0px;
}
.item{
	border-style:solid;
	border-width:1px;
	border-color:#000;
	width:200px;
	height:200px;
	float:left;
}
.item img{
	width:100px;
	height:100px;
}
.hide{
	display:none;
}

.btn{
	border:0;
	background-color:none;
}

.maskDiv{position: absolute;  top: 0%;  left: 0%;  width: 100%;  height: 100%;  background-color: black;  z-index:1001;  -moz-opacity: 0.7;  opacity:.70;  filter: alpha(opacity=70);}
</style>
<script>
//定义控件
var srcdiv=null;//拖动的源

function allowDrop(ev){
	ev.preventDefault();
}

function drag(ev,divdom){
	srcdiv=divdom;
	ev.dataTransfer.setData("text/html",divdom.innerHTML);
}

function drop(ev,divdom){
	ev.preventDefault();
	if(srcdiv!=divdom){
		srcdiv.innerHTML=divdom.innerHTML;
		divdom.innerHTML=ev.dataTransfer.getData("text/html");
	}
}

var currentReViewImgIndex=0;
//预览图片
function reViewImgGroup(widgetId,uuid,el){
	$("#mask"+widgetId).removeClass("hide");
	var url=$("#img"+uuid).attr("src");
	//console.info($("#img"+uuid));
	$("#reviewImg"+widgetId).attr("src",url);
	//计算出当前是第几张图片
	var item=$(el).parent().parent();
	//console.info(item);
	//var itemList=$("#"+widgetId).find(".item");
	var itemList=$(".item");
	for(var i=0;i<itemList.length;i++){
		//console.info($(itemList[i]));
		var img=$(itemList[i]).find("img");
		//console.info($(img).attr("id"));
		if("img"+uuid==$(img).attr("id")){
			currentReViewImgIndex=i;
			console.info(currentReViewImgIndex);
			break;
		}
	}
}

//上一张图片
function preImg(widgetId){
	var itemList=$(".item");
	//console.info(currentReViewImgIndex);
	var _index=currentReViewImgIndex-1;
	if(_index<0){
		_index=0;
	}
	var item=itemList[_index];
	//拿出该位置的图片
	var img=$(item).find("img");
	var url=$(img).attr("src");
	$("#reviewImg"+widgetId).attr("src",url);
	currentReViewImgIndex=_index;
}

//下一张图片
function nextImg(widgetId){
	var itemList=$(".item");
	var len=itemList.length-2;
	//console.info(currentReViewImgIndex);
	var _index=currentReViewImgIndex+1;
	//console.info("_index="+_index);
	if(_index>len){
		//console.info(1111111);
		_index=len;
	}
	
	var item=itemList[_index];
	//拿出该位置的图片
	var img=$(item).find("img");
	var url=$(img).attr("src");
	$("#reviewImg"+widgetId).attr("src",url);
	currentReViewImgIndex=_index;
}

function deleteImg(el,imgId,deleteServer){
	var item=$(el).parent().parent();
	$(item).remove();
	if(imgId&&deleteServer){
		//执行删除图片动作
		console.info(deleteServer+"删除图片["+imgId+"]");
	}
}

(function(){
	var _widget={
		_id:null,
		_el:null,
		_config:null,
		
		_srcItem:null,//移动的源
		
		_init:function(options){
			var self=this;
			self._config=options||{};
			
			self._render();
			self._bind();
		},
		_render:function(){
			var self=this;
			var c=self._config;
			
			//在最开始加入一个空的格子,即新增图片按钮
			//最后再加一个空的
			var _html='<div id="lastItem'+self._id+'" class="item">'
					+'	<p class="itemName"></p>'
					+'	<p style="text-align:center;"><a id="addBtn'+self._id+'" style="text-decoration:none;font-size:20px;" href="javascript:void(0);">上传图片</a></p>'
					+'	<p class="hide"><input id="fileEl'+self._id+'" type="file" multiple /></p>'
					+'</div>';
					
			//预览图片层
			_html+='<div id="mask'+self._id+'" class="maskDiv hide">'
				+'	<div style="width: 60%;height: 50%;background-color: white;margin:210px;">'
				+'		<div style="float:left;"><a href="javascript:preImg(\''+self._id+'\');">上一张</a></div>'
				+'		<img id="reviewImg'+self._id+'" style="float:left;height:100%;width:auto;" src="" />'
				+'		<span style="float:left;"><a href="javascript:nextImg(\''+self._id+'\');">下一张</a></span>'
				+'	</div>'
				+'</div>';
			$(self._el).html(_html);
			
			if(c.data){
				self.loadData(c.data);
			}
		},
		_bind:function(){
			var self=this;
			var c=self._config;
			
			//新增按钮点击事件
			$("#addBtn"+self._id).click(function(){
				//触发文件域点击事件
				$("#fileEl"+self._id).click();
			});
			
			//文件域改变事件
			$("#fileEl"+self._id).change(function(e1){
				if(!$(this).val()||$(this).val()==""){
					return;
				}

				var fileArr=e1.currentTarget.files;

				for(var i=0;i<fileArr.length;i++){
					var file=fileArr[i];
					
					var fileName=file.name;
					(function(imgName){
						var reader=new FileReader();
						reader.readAsDataURL(file);
						//读取文件过程方法
						reader.onloadstart=function(e){
							console.log("开始读取....");
						}
						reader.onprogress=function(e){
							console.log("正在读取中....");
						}
						reader.onabort=function (e){
							console.log("中断读取....");
						}
						reader.onerror=function (e){
							console.log("读取异常....");
						}
						reader.onload=function(e){
							console.log("成功读取....");
							var imgMsg={
								name:imgName,//获取文件名
								base64:this.result//reader.readAsDataURL方法执行完后,base64数据储存在reader.result里
							}

							var _uuid=Math.random()+"";
							_uuid=_uuid.replace(".","");
							
							//创建显示域
							var _html='<div class="item" ondrop="drop(event,this)" ondragover="allowDrop(event)" draggable="true" ondragstart="drag(event, this)">'
							+'	<p id="fileName'+_uuid+'" class="itemName">'+imgName+'</p>'
							+'	<p><a href="javascript:void(0);"><img id="img'+_uuid+'" class="itemUrl" style="width:100%;" src="" /></a></p>'
							//+'	<p><input id="'+_uuid+'" onchange="uploadFile(this,\''+_uuid+'\',\''+uploadServer+'\')" type="file" /></p>'
							+'	<p><button class="btn" type="button" onclick="reViewImgGroup(\''+self._id+'\',\''+_uuid+'\',this)">预览</button>  <button class="btn" type="button" onclick="deleteImg(this)">删除</button></p>'
							+'</div>';
					
							$("#lastItem"+self._id).before(_html);
							//模拟上传
							var c=0;
							var _task=setInterval(function(){
								c++;
								if(c==6){
									clearInterval(_task);
									$("#img"+_uuid).attr("src",imgMsg.base64);
								}else{
									var _text=$("#fileName"+_uuid).text();
									$("#fileName"+_uuid).html(_text+".");
								}
							},1000);
							
						}
						
						
					})(fileName);
					
					
					
				}
				
			});
			
			//遮罩层点击隐藏事件
			$("#mask"+self._id).click(function(e){
				//console.info(e.currentTarget);
				//console.info(e.target);
				if($(e.target).hasClass("maskDiv")){
					$(this).addClass("hide");
				}
			});
			
			//上一张图片
			
			//下一张图片
			

		},
		loadData:function(list){
			var self=this;
			//console.info(list);
			var c=self._config;
			var uploadServer=c.uploadFileServer;
			var deleteServer=c.deleteServer;
			
			var _html='';
			for(var i=0,len=list.length;i<len;i++){
				var item=list[i];
				
				var _uuid=Math.random()+"";
				_uuid=_uuid.replace(".","");
				
				_html+='<div class="item" ondrop="drop(event,this)" ondragover="allowDrop(event)" draggable="true" ondragstart="drag(event, this)">'
					+'	<p id="fileName'+_uuid+'" class="itemName">'+item.name+'</p>'
					+'	<p><a href="javascript:void(0);"><img id="img'+_uuid+'" idata="'+item.id+'" class="itemUrl" style="width:100%;" src="'+item.url+'" /></a></p>'
					//+'	<p><input id="'+_uuid+'" type="file" onchange="uploadFile(this,\''+_uuid+'\',\''+uploadServer+'\')" /></p>'
					+'	<p><button class="btn" type="button" onclick="reViewImgGroup(\''+self._id+'\',\''+_uuid+'\',this)">预览</button>  <button class="btn" type="button" onclick="deleteImg(this,'+item.id+',\''+deleteServer+'\')">删除</button></p>'
					+'</div>';
			}
			
			$("#lastItem"+self._id).before(_html);
		},
		getItemList:function(){
			var self=this;
			var values=[];
			var list=$(self._el).find(".item");
			for(var i=0,len=list.length;i<len;i++){
				var el=list[i];
				var _url=$(el).find(".itemUrl").attr("src");
				if(!_url||_url==""){
					continue;
				}
				var item={
					name:$(el).find(".itemName").text(),
					url:_url,
					sort:i
				}
				//console.info($(el).html());
				values.push(item);
			}
			
			return values;
		}
	}
	
	
	//封装成jquery的控件
	$.fn.DropWidget=function(options){
		//生成uuid
		var uuid=(new Date()).getTime();
		var r=(Math.random()+"").replace(".","");
		uuid+=r;
		
		var _o=$.extend({},_widget);//后面的覆盖前面的
		_o._id=uuid;
		_o._el=this;
		
		var _c=$.extend({},options,$.fn.DropWidget.defaults);//后面的覆盖前面的
		_o._init(_c);
		return _o;
    }
})();

</script>
</head>
<body>
<div id="container"></div>

<div style="clear:both;"><a id="getDataBtn" href="javascript:void(0);">获取信息</a></div>
<script>
(function(){
	//初始化数据
	var list=[{
		id:1,
		name:"图片1.jpg",
		sort:1,
		url:"https://img.zcool.cn/community/0119da559a7d586ac72532640dbfc9.jpg"
	},{
		id:2,
		name:"图片2.jpg",
		sort:2,
		url:"https://img.zcool.cn/community/0141ba559a7d576ac7253264bf5c1c.jpg"
	},{
		id:3,
		name:"图片3.jpg",
		sort:3,
		url:"https://img.zcool.cn/community/01e83655bb57eb32f87528a1fb8789.jpg"
	}];

	//list=[];
	
	//初始化控件
	var _w=$("#container").DropWidget({
		data:list,
		uploadFileServer:"http://www.upload.json",
		deleteServer:"http://www.delete.json"
	});
	
	//获取数据
	$("#getDataBtn").click(function(){
		var values=_w.getItemList();
		console.info(values);
	});
})();
</script>
</body>
</html>

  • 大小: 177.3 KB
分享到:
评论

相关推荐

    图片上传+拖动排序(vue2+elementUI+vuedraggable)

    在本文中,我们将深入探讨如何使用Vue2、ElementUI和vuedraggable库来实现一个功能完善的图片上传和拖动排序系统。这个系统允许用户上传图片,并在上传后通过拖拽来调整图片的顺序,同时支持查看原图和删除图片。 #...

    jQuery批量图片拖动排序和查看

    用户可以选择多张图片进行操作,例如批量拖动排序或删除。实现这一功能可能需要监听`mousedown`、`mouseup`和`mousemove`等事件,结合`$.fn.extend()`扩展jQuery的选择器和方法。 批量删除功能是另一种关键的交互。...

    jq+layui 实现图片拖拽上传功能

    在IT行业中,实现图片拖拽上传功能是一种提升用户体验的有效方式,尤其在网页设计中。本教程将详述如何使用jQuery(jq)与Layui框架共同实现这一功能。jQuery是广泛使用的JavaScript库,提供了丰富的DOM操作和事件...

    vue_upload图片上传支持拖拽

    在Vue.js应用中,实现图片上传功能是常见的需求,特别是支持拖拽上传,可以提供更好的用户体验。在本文中,我们将深入探讨如何在Vue.js中实现这个功能,同时也会涉及到JavaScript和上传相关的技术。 ### Vue组件化...

    jquery - 1.4.2 图片拖拽排序实例

    【jQuery - 1.4.2 图片拖拽排序实例详解】 在Web开发中,实现用户界面的交互性是提高用户体验的重要手段。jQuery库因其简洁的API和强大的功能,成为了JavaScript开发者常用的选择。本实例主要关注的是使用jQuery ...

    图片上传+拖拽顺序 SpringMVC.zip

    该压缩包文件"图片上传+拖拽顺序 SpringMVC.zip"包含了一个使用SpringMVC框架实现的多图片上传功能,同时支持用户通过拖拽来调整图片的展示顺序。这个项目是一个完整的实例,可以直接在Tomcat8服务器上运行,且要求...

    多图片上传,排序

    在IT行业中,多图片上传和排序是...综上所述,多图片上传与排序是一个综合性的技术问题,涵盖了前端交互、后端处理、数据库设计、安全性、用户体验等多个层面。理解并掌握这些知识点对于开发高质量的Web应用至关重要。

    jQuery实现图片上传拖拽排序代码.zip

    综上所述,"jQuery实现图片上传拖拽排序代码.zip"的项目涵盖了前端开发中的多个关键知识点,包括jQuery的使用、HTML5的新特性、Ajax通信以及用户交互的实现。理解并掌握这些概念和技术,对于创建交互性强、用户体验...

    图片拖拽改变顺序

    总的来说,"图片拖拽改变顺序"是一个涉及到前端交互设计、HTML5 API、事件监听、DOM操作、CSS3动画以及前后端数据同步等多个技术层面的功能。它的实现不仅需要扎实的编程基础,还需要对用户体验有深入的理解,以创造...

    批量上传图片和拖动上传,分块上传

    "批量上传图片"、"拖动上传"以及"分块上传"是提高用户体验和优化服务器性能的关键技术。以下是对这些概念的详细解释: 1. 批量上传图片:批量上传允许用户一次性选择多个文件进行上传,而不需要逐个点击上传。这极...

    jQuery拖动排序增加删除图片代码.zip

    在本项目中,"jQuery拖动排序增加删除图片代码.zip" 是一个包含使用jQuery实现的交互式图片管理功能的代码示例。这个压缩包的核心功能包括图片的拖动排序、批量删除、获取更新后的图片数组以及添加新图片的能力。...

    jQuery图片上传拖拽排序代码.zip

    【jQuery图片上传拖拽排序代码.zip】是一个包含jQuery特效、CSS特效和网页特效的压缩包,主要用于实现用户可以通过拖拽操作来上传和排序图片的功能。这个功能在现代网页设计中非常常见,尤其适用于图片展示、相册...

    php+ajax实现多图上传-拖拽排序-不同尺寸裁切-添加水印demo

    拖拽排序功能让用户可以通过拖动图片来改变它们的显示顺序。这通常使用JavaScript库如jQuery UI或Sortable实现,监听拖放事件,并通过AJAX将新的顺序发送到服务器,更新数据库中的记录。 4. **图片裁切** 图片...

    html5拖拽排序多图片上传插件特效源码.zip

    本插件就是基于这一特性,实现了图片的拖拽排序和多图片上传功能。 首先,我们来详细了解一下HTML5的拖放API。在HTML5中,拖放功能主要由以下几部分构成: 1. **dataTransfer对象**:当用户开始拖动一个元素时,...

    JS拖拽图片特效并存入数据库

    综上所述,"JS拖拽图片特效并存入数据库"项目结合了JavaScript的事件处理、AJAX的异步通信、数据库操作等多个核心技术,旨在提供一个交互性强且功能完善的图片管理平台。通过不断优化和迭代,可以打造出更加高效和...

    jQuery图片上传拖拽排序代码

    在本文中,我们将深入探讨如何使用jQuery和Vue.js来实现一个功能丰富的图片上传与拖拽排序功能,特别是在HTML表格中的应用。这个功能可以极大地提升用户体验,使得用户能够方便地管理和组织上传的图片。 首先,...

    FraUpload多图片上传.zip

    这款插件不仅支持批量上传,还具备图片预览、可拖动排序等人性化特性,极大地提升了用户在网页上的交互体验。 在多图片上传这一领域,FraUpload插件具有以下核心知识点: 1. **批量上传**:用户可以选择多张图片...

    多图上传可拖拽jQuery特效.zip

    【描述】中的"支持拖动图片上传"表明该特效利用了HTML5的拖放API(Drag and Drop API),允许用户直接从本地文件系统中选择并拖动图片至指定区域进行上传。这种交互方式大大提高了用户体验,减少了传统上传方式中的...

Global site tag (gtag.js) - Google Analytics