实现多个div拖拽移动,交换位置功能,代码复制可运行,有交换特效

9 篇文章 0 订阅
1 篇文章 0 订阅

拖动标题行可交换

废话不多说,直接上代码:

drag.css

 

	
	#moveBar1{ 
		position: absolute; 
		left:2px;
		top:2px;
		width: 250px; 
		height: 300px; 
		background: #666; 
		border: solid 0px #000; 
		opacity: 0.6;
		z-index:1;
	}
	#moveBar2{ 
		position: absolute; 
		left:2px;
		top:310px;
		width: 250px; 
		height: 300px; 
		background: #666; 
		border: solid 0px #000; 
		opacity: 0.6;
		z-index:1;
	}
	#moveBar3{ 
		position: absolute;
		left:254px;
		top:2px; 
		width: 250px; 
		height: 300px; 
		background: #666; 
		border: solid 0px #000; 
		opacity: 0.6;
		z-index:1;
	}
	#moveBar4{ 
		position: absolute;
		left:254px;
		top:310px; 
		width: 250px; 
		height: 300px; 
		background: #666; 
		border: solid 0px #000; 
		opacity: 0.6;
		z-index:1;
	}
	#moveBar5{ 
		position: absolute; 
		left:506px;
		top:2px; 
		width: 250px; 
		height: 300px; 
		background: #666; 
		border: solid 0px #000; 
		opacity: 0.6;
		z-index:1;
	}
	#moveBar6{ 
		position: absolute; 
		left:506px;
		top:310px; 
		width: 250px; 
		height: 300px; 
		background: #666; 
		border: solid 0px #000; 
		opacity: 0.6;
		z-index:1;
	}
	#moveBar7{ 
		position: absolute; 
		left:758px;
		top:2px;
		width: 250px; 
		height: 300px; 
		background: #666; 
		border: solid 0px #000; 
		opacity: 0.6;
		z-index:1;
	}
	#moveBar8{ 
		position: absolute;
		left:758px;
		top:310px;  
		width: 250px; 
		height: 300px; 
		background: #666; 
		border: solid 0px #000; 
		opacity: 0.6;
		z-index:1;
	} 
	#banner1,#banner2,#banner3,#banner4,#banner5,#banner6,#banner7,#banner8{ 
		background: #666; 
		cursor: move; 
	} 

drag.js

 

$(function () { 
	var oleft,uleft,left=[0,0,0,0,0,0,0,0,0,0,0];//原始位置,鼠标松开位置,交换位置,left距离
	var otop,utop,top=[0,0,0,0,0,0,0,0,0,0,0];原始位置,鼠标松开位置,交换位置,top距离
	var keen=200;//交换位置灵敏度
	var i=0,j=0;
	$('#banner1').mousedown( 
		function (event) { 
			j++;
			var isMove = true; 
			var abs_x = event.pageX - $('#moveBar1').offset().left; 
			var abs_y = event.pageY - $('#moveBar1').offset().top;
			oleft=$('#moveBar1').offset().left;//鼠标按下时,div距离左边的像素
			otop=$('#moveBar1').offset().top;//鼠标按下时,距离上边的像素
			for(var k=0;k<8;k++){
				$("#moveBar"+(k+1)).css({"z-index":1});
			}
			$("#moveBar1").css({"z-index":2});
			$(document).mousemove(function (event) { 
					if (isMove) { 
						var obj = $('#moveBar1'); 
						obj.css({'left':event.pageX - abs_x, 'top':event.pageY - abs_y}); 
					} 
				} 
			);$(document).mouseup(
				function () { 
					i++;
					isMove = false;
					if(i==j){
						uleft=$('#moveBar1').offset().left;
						utop=$('#moveBar1').offset().top;
						for(var k=0;k<8;k++){
							left[k]=$("#moveBar"+(k+1)).offset().left;
							top[k]=$("#moveBar"+(k+1)).offset().top;
						}
						for(var k=0;k<8;k++){
							if(k!=0){
								if(0<=uleft-left[k]&&uleft-left[k]<=keen&&0<=utop-top[k]&&utop-top[k]<=keen){
									$("#moveBar1").animate({"left":left[k],"top":top[k]});
									$("#moveBar"+(k+1)).animate({"left":oleft,"top":otop});
									break;
								}
							}else{
								continue;
							}
						}
						
					}
				}
				
			); 
			i=0;
		} 
		
	);
	
	$('#banner2').mousedown( 
		function (event) { 
			j++;
			var isMove = true; 
			var abs_x = event.pageX - $('#moveBar2').offset().left; 
			var abs_y = event.pageY - $('#moveBar2').offset().top;
			oleft=$('#moveBar2').offset().left;//鼠标按下时,div距离左边的像素
			otop=$('#moveBar2').offset().top;//鼠标按下时,距离上边的像素
			for(var k=0;k<8;k++){
				$("#moveBar"+(k+1)).css({"z-index":1});
			}
			$("#moveBar2").css({"z-index":2});
			$(document).mousemove(function (event) { 
					if (isMove) { 
						var obj = $('#moveBar2'); 
						obj.css({'left':event.pageX - abs_x, 'top':event.pageY - abs_y}); 
					} 
				} 
			);$(document).mouseup(
				function () { 
					i++;
					isMove = false;
					if(i==j){
						uleft=$('#moveBar2').offset().left;
						utop=$('#moveBar2').offset().top;
						for(var k=0;k<8;k++){
							left[k]=$("#moveBar"+(k+1)).offset().left;
							top[k]=$("#moveBar"+(k+1)).offset().top;
						}
						for(var k=0;k<8;k++){
							if(k!=1){
								if(0<=uleft-left[k]&&uleft-left[k]<=keen&&0<=utop-top[k]&&utop-top[k]<=keen){
									$("#moveBar2").animate({"left":left[k],"top":top[k]});
									$("#moveBar"+(k+1)).animate({"left":oleft,"top":otop});
									break;
								}
							}else{
								continue;
							}
						}
						
					}
				}
				
			); 
			i=0;
		} 
		
	);
	
	$('#banner3').mousedown( 
		function (event) { 
			j++;
			var isMove = true; 
			var abs_x = event.pageX - $('#moveBar3').offset().left; 
			var abs_y = event.pageY - $('#moveBar3').offset().top;
			oleft=$('#moveBar3').offset().left;//鼠标按下时,div距离左边的像素
			otop=$('#moveBar3').offset().top;//鼠标按下时,距离上边的像素
			for(var k=0;k<8;k++){
				$("#moveBar"+(k+1)).css({"z-index":1});
			}
			$("#moveBar3").css({"z-index":2});
			$(document).mousemove(function (event) { 
					if (isMove) { 
						var obj = $('#moveBar3'); 
						obj.css({'left':event.pageX - abs_x, 'top':event.pageY - abs_y}); 
					} 
				} 
			);$(document).mouseup(
				function () { 
					i++;
					isMove = false;
					if(i==j){
						uleft=$('#moveBar3').offset().left;
						utop=$('#moveBar3').offset().top;
						for(var k=0;k<8;k++){
							left[k]=$("#moveBar"+(k+1)).offset().left;
							top[k]=$("#moveBar"+(k+1)).offset().top;
						}
						for(var k=0;k<8;k++){
							if(k!=2){
								if(0<=uleft-left[k]&&uleft-left[k]<=keen&&0<=utop-top[k]&&utop-top[k]<=keen){
									$("#moveBar3").animate({"left":left[k],"top":top[k]});
									$("#moveBar"+(k+1)).animate({"left":oleft,"top":otop});
									break;
								}
							}else{
								continue;
							}
						}
						
					}
				}
				
			); 
			i=0;
		} 
		
	);
	
	$('#banner4').mousedown( 
		function (event) { 
			j++;
			var isMove = true; 
			var abs_x = event.pageX - $('#moveBar4').offset().left; 
			var abs_y = event.pageY - $('#moveBar4').offset().top;
			oleft=$('#moveBar4').offset().left;//鼠标按下时,div距离左边的像素
			otop=$('#moveBar4').offset().top;//鼠标按下时,距离上边的像素
			for(var k=0;k<8;k++){
				$("#moveBar"+(k+1)).css({"z-index":1});
			}
			$("#moveBar4").css({"z-index":2});
			$(document).mousemove(function (event) { 
					if (isMove) { 
						var obj = $('#moveBar4'); 
						obj.css({'left':event.pageX - abs_x, 'top':event.pageY - abs_y}); 
					} 
				} 
			);$(document).mouseup(
				function () { 
					i++;
					isMove = false;
					if(i==j){
						uleft=$('#moveBar4').offset().left;
						utop=$('#moveBar4').offset().top;
						for(var k=0;k<8;k++){
							left[k]=$("#moveBar"+(k+1)).offset().left;
							top[k]=$("#moveBar"+(k+1)).offset().top;
						}
						for(var k=0;k<8;k++){
							if(k!=3){
								if(0<=uleft-left[k]&&uleft-left[k]<=keen&&0<=utop-top[k]&&utop-top[k]<=keen){
									$("#moveBar4").animate({"left":left[k],"top":top[k]});
									$("#moveBar"+(k+1)).animate({"left":oleft,"top":otop});
									break;
								}
							}else{
								continue;
							}
						}
						
					}
				}
				
			); 
			i=0;
		} 
		
	);
	
	$('#banner5').mousedown( 
		function (event) { 
			j++;
			var isMove = true; 
			var abs_x = event.pageX - $('#moveBar5').offset().left; 
			var abs_y = event.pageY - $('#moveBar5').offset().top;
			oleft=$('#moveBar5').offset().left;//鼠标按下时,div距离左边的像素
			otop=$('#moveBar5').offset().top;//鼠标按下时,距离上边的像素
			for(var k=0;k<8;k++){
				$("#moveBar"+(k+1)).css({"z-index":1});
			}
			$("#moveBar5").css({"z-index":2});
			$(document).mousemove(function (event) { 
					if (isMove) { 
						var obj = $('#moveBar5'); 
						obj.css({'left':event.pageX - abs_x, 'top':event.pageY - abs_y}); 
					} 
				} 
			);$(document).mouseup(
				function () { 
					i++;
					isMove = false;
					if(i==j){
						uleft=$('#moveBar5').offset().left;
						utop=$('#moveBar5').offset().top;
						for(var k=0;k<8;k++){
							left[k]=$("#moveBar"+(k+1)).offset().left;
							top[k]=$("#moveBar"+(k+1)).offset().top;
						}
						for(var k=0;k<8;k++){
							if(k!=4){
								if(0<=uleft-left[k]&&uleft-left[k]<=keen&&0<=utop-top[k]&&utop-top[k]<=keen){
									$("#moveBar5").animate({"left":left[k],"top":top[k]});
									$("#moveBar"+(k+1)).animate({"left":oleft,"top":otop});
									break;
								}
							}else{
								continue;
							}
						}
						
					}
				}
				
			); 
			i=0;
		} 
		
	);
	
	$('#banner6').mousedown( 
		function (event) { 
			j++;
			var isMove = true; 
			var abs_x = event.pageX - $('#moveBar6').offset().left; 
			var abs_y = event.pageY - $('#moveBar6').offset().top;
			oleft=$('#moveBar6').offset().left;//鼠标按下时,div距离左边的像素
			otop=$('#moveBar6').offset().top;//鼠标按下时,距离上边的像素
			for(var k=0;k<8;k++){
				$("#moveBar"+(k+1)).css({"z-index":1});
			}
			$("#moveBar6").css({"z-index":2});
			$(document).mousemove(function (event) { 
					if (isMove) { 
						var obj = $('#moveBar6'); 
						obj.css({'left':event.pageX - abs_x, 'top':event.pageY - abs_y}); 
					} 
				} 
			);$(document).mouseup(
				function () { 
					i++;
					isMove = false;
					if(i==j){
						uleft=$('#moveBar6').offset().left;
						utop=$('#moveBar6').offset().top;
						for(var k=0;k<8;k++){
							left[k]=$("#moveBar"+(k+1)).offset().left;
							top[k]=$("#moveBar"+(k+1)).offset().top;
						}
						for(var k=0;k<8;k++){
							if(k!=5){
								if(0<=uleft-left[k]&&uleft-left[k]<=keen&&0<=utop-top[k]&&utop-top[k]<=keen){
									$("#moveBar6").animate({"left":left[k],"top":top[k]});
									$("#moveBar"+(k+1)).animate({"left":oleft,"top":otop});
									break;
								}
							}else{
								continue;
							}
						}
						
					}
				}
				
			); 
			i=0;
		} 
		
	);
	
	$('#banner7').mousedown( 
		function (event) { 
			j++;
			var isMove = true; 
			var abs_x = event.pageX - $('#moveBar7').offset().left; 
			var abs_y = event.pageY - $('#moveBar7').offset().top;
			oleft=$('#moveBar7').offset().left;//鼠标按下时,div距离左边的像素
			otop=$('#moveBar7').offset().top;//鼠标按下时,距离上边的像素
			for(var k=0;k<8;k++){
				$("#moveBar"+(k+1)).css({"z-index":1});
			}
			$("#moveBar7").css({"z-index":2});
			$(document).mousemove(function (event) { 
					if (isMove) { 
						var obj = $('#moveBar7'); 
						obj.css({'left':event.pageX - abs_x, 'top':event.pageY - abs_y}); 
					} 
				} 
			);$(document).mouseup(
				function () { 
					i++;
					isMove = false;
					if(i==j){
						uleft=$('#moveBar7').offset().left;
						utop=$('#moveBar7').offset().top;
						for(var k=0;k<8;k++){
							left[k]=$("#moveBar"+(k+1)).offset().left;
							top[k]=$("#moveBar"+(k+1)).offset().top;
						}
						for(var k=0;k<8;k++){
							if(k!=6){
								if(0<=uleft-left[k]&&uleft-left[k]<=keen&&0<=utop-top[k]&&utop-top[k]<=keen){
									$("#moveBar7").animate({"left":left[k],"top":top[k]});
									$("#moveBar"+(k+1)).animate({"left":oleft,"top":otop});
									break;
								}
							}else{
								continue;
							}
						}
						
					}
				}
				
			); 
			i=0;
		} 
		
	);
	
	$('#banner8').mousedown( 
		function (event) { 
			j++;
			var isMove = true; 
			var abs_x = event.pageX - $('#moveBar8').offset().left; 
			var abs_y = event.pageY - $('#moveBar8').offset().top;
			oleft=$('#moveBar8').offset().left;//鼠标按下时,div距离左边的像素
			otop=$('#moveBar8').offset().top;//鼠标按下时,距离上边的像素
			for(var k=0;k<8;k++){
				$("#moveBar"+(k+1)).css({"z-index":1});
			}
			$("#moveBar8").css({"z-index":2});
			$(document).mousemove(function (event) { 
					if (isMove) { 
						var obj = $('#moveBar8'); 
						obj.css({'left':event.pageX - abs_x, 'top':event.pageY - abs_y}); 
					} 
				} 
			);$(document).mouseup(
				function () { 
					i++;
					isMove = false;
					if(i==j){
						uleft=$('#moveBar8').offset().left;
						utop=$('#moveBar8').offset().top;
						for(var k=0;k<8;k++){
							left[k]=$("#moveBar"+(k+1)).offset().left;
							top[k]=$("#moveBar"+(k+1)).offset().top;
						}
						for(var k=0;k<8;k++){
							if(k!=7){
								if(0<=uleft-left[k]&&uleft-left[k]<=keen&&0<=utop-top[k]&&utop-top[k]<=keen){
									$("#moveBar8").animate({"left":left[k],"top":top[k]});
									$("#moveBar"+(k+1)).animate({"left":oleft,"top":otop});
									break;
								}
							}else{
								continue;
							}
						}
						
					}
				}
				
			); 
			i=0;
		} 
		
	);
} );

 

 

 

 

index.html

 

 

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8">
<title>Qing's Web</title> 
<script src="js/jquery.js" type="text/javascript"></script> 
<link rel="stylesheet" href="css/drag.css" type="text/css"/>
<script type="text/javascript"src="js/drag.js"> </script> 
</head> 
<body style="padding-top: 50px;"> 
<div id="sortable">
	<div id="moveBar1" class="ui-state-default"> 
		<div id="banner1">标题1</div> 
		<div class="content"></div> 
	</div> 
	<div id="moveBar2"class="ui-state-default"> 
		<div id="banner2">标题2</div> 
		<div class="content"></div> 
	</div> 
	<div id="moveBar3"class="ui-state-default"> 
		<div id="banner3">标题3</div> 
		<div class="content"></div> 
	</div> 
	<div id="moveBar4"class="ui-state-default"> 
		<div id="banner4">标题4</div> 
		<div class="content"></div> 
	</div> 
	<div id="moveBar5"class="ui-state-default"> 
		<div id="banner5">标题5</div> 
		<div class="content"></div> 
	</div> 
	<div id="moveBar6"class="ui-state-default"> 
		<div id="banner6">标题6</div> 
		<div class="content"></div> 
	</div> 
	<div id="moveBar7"class="ui-state-default"> 
		<div id="banner7">标题7</div> 
		<div class="content"></div> 
	</div> 
	<div id="moveBar8"class="ui-state-default"> 
		<div id="banner8">标题8</div> 
		<div class="content"></div> 
	</div> 

</div>

</body> 
</html>

文档结构图

运行效果:

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
好的,以下是一个实现多个div任意位置拖拽的示例代码HTML部分: ```html <div id="myDiv1" class="draggable">可拖动div1</div> <div id="myDiv2" class="draggable">可拖动div2</div> <div id="myDiv3" class="draggable">可拖动div3</div> ``` CSS部分: ```css .draggable { position: absolute; cursor: move; } ``` JavaScript部分: ```javascript var draggables = document.querySelectorAll(".draggable"); var activeDraggable = null; var initialX, initialY, currentX, currentY, xOffset = 0, yOffset = 0; draggables.forEach(function(draggable) { draggable.addEventListener("mousedown", dragStart); draggable.addEventListener("mouseup", dragEnd); draggable.addEventListener("mousemove", drag); }); function dragStart(event) { activeDraggable = this; initialX = event.clientX - xOffset; initialY = event.clientY - yOffset; } function dragEnd(event) { initialX = currentX; initialY = currentY; activeDraggable = null; } function drag(event) { if (activeDraggable) { event.preventDefault(); currentX = event.clientX - initialX; currentY = event.clientY - initialY; xOffset = currentX; yOffset = currentY; setTranslate(currentX, currentY, activeDraggable); } } function setTranslate(xPos, yPos, el) { el.style.transform = "translate3d(" + xPos + "px, " + yPos + "px, 0)"; } ``` 这个代码会使得拥有class为draggable的所有div元素可以被拖动,并且当拖动结束时会被放置在最后一次拖动位置上。可以通过修改CSS样式来控制这些div元素的样式和位置
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值