图片拖动与最近图片互换位置

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>互换位置</title>
	<style>
		*{
			padding: 0;
			margin:0;
		}
		ul{
			position: relative;
			list-style: none;
			width: 900px;
			margin:0 auto;
		}
		li{
			float: left;
			margin:10px;
			width: 280px;
			height: 135px;
			overflow: hidden;
		}
		img{
			width: 100%;
			height: 100%;
		}
		ul .active{
			border:solid 1px red;
		}
	</style>
	<script src="move.js"></script>
	<script>
		window.onload=function(){
			var oUl=document.getElementById("ul1");
			var aLi=oUl.getElementsByTagName("li");
			var aPos=[];
			var iMinZindex=2;
			for (var i = 0; i < aLi.length; i++) {
				aPos[i]={left:aLi[i].offsetLeft,top:aLi[i].offsetTop};
			}
			for (var i = 0; i < aLi.length; i++) {
				aLi[i].style.left=aPos[i].left+'px';
				aLi[i].style.top=aPos[i].top+'px';
				aLi[i].style.position="absolute";
				aLi[i].style.margin="0";
				aLi[i].index=i;
			}
			for (var i = 0; i < aLi.length; i++) {
				getDrag(aLi[i]);
			}
			//拖拽函数
			function getDrag(obj){
				obj.onmousedown=function(ev){
					var oEvent=event || ev;
					var disX=oEvent.clientX-obj.offsetLeft;
					var disY=oEvent.clientY-obj.offsetTop;
					obj.style.zIndex=iMinZindex++;
					clearInterval(obj.timer);
					document.onmousemove=function(ev){
						var oEvent=event || ev;
						obj.style.left=oEvent.clientX-disX+'px';
						obj.style.top=oEvent.clientY-disY+'px';
						for (var i = 0; i < aLi.length; i++) {
							aLi[i].className="";
						}
						var oNear=findNearest(obj);
						if (oNear) {

							oNear.className="active";
						}
					}
					document.onmouseup=function(){
						document.onmousemove=null;
						document.onmouseup=null;
						var oNear=findNearest(obj);
						if (oNear) {
							oNear.className="";
							oNear.style.zIndex=iMinZindex++;
							obj.style.zIndex=iMinZindex++;
							//交换位置
							startMove(oNear,aPos[obj.index]);
							startMove(obj,aPos[oNear.index]);
							//交换索引值
							var tem=0;
							tem=obj.index;
							obj.index=oNear.index;
							oNear.index=tem;
						}else{
							startMove(obj,{left:aPos[obj.index].left,top:aPos[obj.index].top});
						}
					}
					return false;
				}
				
			}

			//碰撞检测
			function cdText(obj1,obj2){
				var l1=obj1.offsetLeft;
				var r1=obj1.offsetLeft+obj1.offsetWidth;
				var t1=obj1.offsetTop;
				var b1=obj1.offsetTop+obj1.offsetHeight;

				var l2=obj2.offsetLeft;
				var r2=obj2.offsetLeft+obj2.offsetWidth;
				var t2=obj2.offsetTop;
				var b2=obj2.offsetTop+obj2.offsetHeight;
				if (r1<l2 || l1>r2 || b1<t2  || t1>b2 ) {
					return false;
				}else{
					return true;
				}
			}
			//获得两者之间距离
			function getDis(obj1,obj2){
				var a=obj1.offsetLeft-obj2.offsetLeft;
				var b=obj1.offsetTop-obj2.offsetTop;
				return Math.sqrt(a*a+b*b);

			}
			//获取最小距离
			function findNearest(obj){
				//最小值初始化,随意一个值,不能太小;
				var iMin=9999;
				var iMinIndex=-1;
				for (var i = 0; i < aLi.length; i++) {
					if (obj==aLi[i]) continue;
					if (cdText(obj,aLi[i])) {
						var dis=getDis(obj,aLi[i]);
						if (iMin>dis) {
							iMin=dis;
							iMinIndex=i;
						}
					}
				}
				//检测最终有没有找到最近的
				if (iMinIndex==-1) {
					return null;
				}else{
					return aLi[iMinIndex];
				}
			}
		}
	</script>
</head>
<body>
	<ul id="ul1">
		<li><img src="1.jpg" alt=""></li>
		<li><img src="2.jpg" alt=""></li>
		<li><img src="3.jpg" alt=""></li>
		<li><img src="4.jpg" alt=""></li>
		<li><img src="5.jpg" alt=""></li>
		<li><img src="6.jpg" alt=""></li>
		<li><img src="7.jpg" alt=""></li>
		<li><img src="8.jpg" alt=""></li>
		<li><img src="9.jpg" alt=""></li>
		<li><img src="10.jpg" alt=""></li>
		<li><img src="11.jpg" alt=""></li>
		<li><img src="12.jpg" alt=""></li>
	</ul>
</body>
</html>

成果展示:

 

 

 

猜你喜欢

转载自blog.csdn.net/zhangqling/article/details/85101796