JavaScript div层拖拽左右移动

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>拖动DIV</title> 
<style type="text/css"> 
.show{
	background:#7cd2f8;
	width:100%;
	height:100px;
	text-align:center;
	left:0px;
	top:0px;
	z-index:10;
	margin-bottom: 5px;
}
.divLeft, .divRight{
	width:58%; height: 500px; float: left;
}
.divRight{
	width:38%; height: 500px; float: left;
}
</style>  
<script type="text/javascript" src="js/jquery.js"></script> 
<script type="text/javascript">

var tdiv;
var node= ".show";
var ao = null;
var draggedFlag=0;  //鼠标在拖动状态,0:未初始化 1:准备阶段,2:拖动阶段
var parentDiv=null;

function SectionMousedown(e){
	
	ao = e.srcElement;
	parentDiv=ao.parentNode;
	draggedFlag=1;
	
	tdiv = document.createElement("div");
	//tdiv.setAttribute("id","itemdiv");
	tdiv.innerHTML = ao.outerHTML;
	tdiv.style.display = "block";
	tdiv.style.position = "absolute";
	tdiv.style.filter = "alpha(opacity=70)";
	tdiv.style.cursor = "move";
	tdiv.style.zIndex = 12;
	
	tdiv.style.width = ao.offsetWidth+"px"; //被移动table对象的高度
	tdiv.style.height = ao.offsetHeight+"px";
	tdiv.style.top = (getInfo(ao).top+0)+"px";
	tdiv.style.left = getInfo(ao).left+"px";
	document.body.appendChild(tdiv);
	//鼠标按下时该鼠标所在的位置
	lastX = event.clientX;
	lastY = event.clientY;
	//tdiv的位置
	lastLeft = tdiv.style.left;
	lastTop = tdiv.style.top;
	//alert(lastLeft +' '+lastTop);
	$(tdiv).css("cursor", "move");
	try {
	//	tdiv.dragDrop(); //初始化拖曳事件
	} catch (e) {} 
	
	//this表示原来的div
	var offset = $(this).offset(); //DIV在页面的位置
	var x = e.pageX - offset.left; //获得鼠标指针离DIV元素左边界的距离
	var y = e.pageY - offset.top; //获得鼠标指针离DIV元素上边界的距离
	//alert(x+' '+y);
	$(document).bind("mousemove", function (ev) //绑定鼠标的移动事件,因为光标在DIV元素外面也要有效果,所以要用doucment的事件,而不用DIV元素的事件
	{	
		if(tdiv!=null){
			draggedFlag=2;
			$(tdiv).stop(); //加上这个之后
			var _x = ev.pageX - x; //获得X轴方向移动的值
			var _y = ev.pageY - y; //获得Y轴方向移动的值
			document.getElementById("seatX").value=ev.pageX;
			
			document.getElementById("seatY").value=ev.pageY;
			$(tdiv).animate({
				left :_x + "px",
				top : _y + "px"
			}, 10);
		}
	});
}


$(document).ready(function () {

	var partR=document.getElementById("partR");
	var partL=document.getElementById("partL");
	for(var i=0;i<partR.children.length;i++){
		var sectionR=partR.children[i];
		$(sectionR).mousedown(SectionMousedown);
	}
	for(var i=0;i<partL.children.length;i++){
		var sectionL=partL.children[i];
		$(sectionL).mousedown(SectionMousedown);
	}


	$(document).mouseup(function (e) {

		//如果当前div位置小于0,将该div置于位置0处
		var offset = $(node).offset(); //DIV在页面的位置
		var x = offset.left; //获得鼠标指针离DIV元素左边界的距离
		var y =  offset.top; //获得鼠标指针离DIV元素上边界的距离
		
		
		if(draggedFlag==0){ //未初始化阶段,放下鼠标
			
		}else if(draggedFlag==1){	//准备阶段,放下鼠标
			tdiv.style.cursor = "default";
			draggedFlag=0;
			document.body.removeChild(tdiv);
			tdiv=null;
		}else if(draggedFlag==2){	//拖动阶段,放下鼠标
			draggedFlag=0;
			tdiv.style.cursor = "default";
			$(tdiv).css("cursor", "default");	//鼠标指针变回原来默认形状
			
			//取得tdiv中的子结点
			var tchild=tdiv.children[0];
			$(document).unbind("mousemove");//解除绑定鼠标移动事件
			
			//鼠标松开时的位置
			var _x=e.pageX;		
			var _y=e.pageY;
			var st_t=tdiv.children[0];
			$(st_t).mousedown(SectionMousedown);
			
			//松开鼠标时鼠标在左边,右边加上该结点
			if(mouseOnLeft(_x,_y)){
				partL.appendChild(st_t);
				parentDiv.removeChild(ao);
			}else
			//松开鼠标时在鼠标位置在右边,右边加上该结点
			if(mouseOnRight(_x,_y)){
				partR.appendChild(st_t);
				parentDiv.removeChild(ao);
			}else{//松开鼠标时鼠标在其他位置,
			}
			document.body.removeChild(tdiv);
			tdiv=null;
			ao = null;
			st_t=null;
			parentDiv=null;
			//nodeAnimate(x,y);
		}
		

	});
})

function nodeAnimate(x,y){
	if(x<0) x=0;
	if(y<0) y=0;
	$(node).animate({
		left : x + "px",
		top : y + "px"
	}, 1001);	
}


//返回true/false。判断鼠标在右边
function mouseOnRight(x,y){
	//鼠标松开时的位置
	//var x=e.pageX;		
	//var y=e.pageY;
	//右边框子的大小位置
	var partR=document.getElementById("partR");
	
	var divx1 = partR.offsetLeft; 
	var divy1 = partR.offsetTop; 
	var divx2 = partR.offsetLeft + partR.offsetWidth; 
	var divy2 = partR.offsetTop + partR.offsetHeight;  
	//alert(divx1+' '+divy1+' '+divx2+' '+divy2+' ');
	document.getElementById("seatZ").value=divx1+' '+divy1+' '+divx2+' '+divy2+' ';
	//if( x <= divx2 && x >= divx1 && y <= divy2 && y >= divy1){ 
	if( x >= divx1 ){ 
		return true; 
	}else
		return false;
	
}
//返回true/false  判断鼠标在左边
function mouseOnLeft(x,y){
	//鼠标松开时的位置
	//var x=e.pageX;		
	//var y=e.pageY;
	//右边框子的大小位置
	var partL=document.getElementById("partL");
	
	var divx1 = partL.offsetLeft; 
	var divy1 = partL.offsetTop; 
	var divx2 = partL.offsetLeft + partL.offsetWidth; 
	var divy2 = partL.offsetTop + partL.offsetHeight;  
	//alert(divx1+' '+divy1+' '+divx2+' '+divy2+' ');
	if(x < divx2){ 
		return true; 
	}else
		return false;
	
}
function getInfo(o) { //取得对象的绝对坐标
	var to = new Object();
	to.left = to.right = to.top = to.bottom = 0;
	var twidth = o.offsetWidth;
	var theight = o.offsetHeight;
	while (o != document.body) {
		to.left += o.offsetLeft;
		to.top += o.offsetTop;
		o = o.offsetParent;
	}
	to.right = to.left + twidth;
	to.bottom = to.top + theight;
	return to;
}
</script> 
</head> 
<body>
<input type = "button"  οnclick="aaa();" value="Click Me" />
<input type = "text"   id="seatX" />
<input type = "text="  id="seatY" />
<input type = "text="  id="seatZ" />
<br /><br />
<div  style="width:100%; height: 500px; border-color: #FF0000; border: 5px;"   >
  
    <!--jquery实现DIV层拖-->
    <div  id="partL" class="divLeft" >
      	
      	<div id="st1" class="show"> 
			jquery实现DIV层拖动1	  
		</div> 
      	<div id="st2" class="show"> 
			jquery实现DIV层拖动	2  
		</div> 
		<div id="st3" class="show"> 
			jquery实现DIV层拖动3	  
		</div> 
      	<div id="st4" class="show"> 
			jquery实现DIV层拖动	4  
		</div> 
		
    </div>
	<div style="width:1%; height: 500px; float: left; border-right-color: #00FF33; background-color: #00FF00;"></div>
    <div id="partR" class="divRight" >
      	<div id="st5" class="show"> 
			jquery实现DIV层拖动	5  
		</div> 
      
    </div>
</div>
</div>
<!--jquery实现DIV层拖-->
</body> 
<script type="text/javascript">
function aaa() {
 alert(getOs())
}

function getOs()  
{  
    var OsObject = "";  
   if(!!window.ActiveXObject || "ActiveXObject" in window) {  
        return "MSIE";  
   }  
   if(isFirefox=navigator.userAgent.indexOf("Firefox")>0){  
        return "Firefox";  
   }
   if(isChrome=navigator.userAgent.indexOf("Chrome")>0) {  
        return "Chrome";  
   }
   if(isSafari=navigator.userAgent.indexOf("Safari")>0) {  
        return "Safari";  
   }   
}


</script>
</html> 

用文件保存该代码即可执行,需要引入jquery.js文件,花了我两天时间才做成,不过还有待改进。

可以兼容IE9到IE11,谷歌浏览器,火狐暂时不兼容,页面底下包括浏览器判断,,读者可以依此去想办法兼容其他浏览器



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值