New Document body{padding:0px;text-align:center;font:12px Arial;} div.container{width:100px;height:100px;border:1px solid #000;margin:10px auto;} div#main{width:99px;height:99px;border:1px solid #000;background:#050;color:#fff;font:12px Arial;margin:auto;} p{text-algin:left;} /********************Mouse类及其方法********************/ //创建鼠标类 var Mouse=new Object(); //获取鼠标位置 Mouse.getMousePosition=function(event) { var event=event || window.event; if(event.pageX) { return {x:event.pageX,y:event.pageY}; } else { var x=event.clientX+document.body.scrollLeft-document.body.clientLeft; var y=event.clientY+document.body.scrollTop-document.body.clientTop; return {x:x,y:y}; } } //鼠标是否按下 Mouse.isDown=false; /*************************Element类及其方法***********************/ var Element=new Object(); //根据id获取目标 Element.getElement=function(id) { var obj=document.getElementById(id); if(obj) { return obj; } else { alert("getElement():no such Element"); return null; } } //获取元素自身的尺寸 Element.getElementSize=function(object) { try { return {width:object.offsetWidth,height:object.offsetHeight}; } catch (error) { alert("getElementSize():Element is undefined"); return null; } } //获取元素的位置 Element.getElementPosition=function(object) { try { var left=0,top=0; while(object.offsetParent) { left+=object.offsetLeft; top+=object.offsetTop; object=object.offsetParent; } return {left:left,top:top}; } catch (error) { alert("getEelementPosition():Element is undefined"); return null; } } //获取元素的父节点 Element.getElementParentNode=function(obj) { try { return obj.parentNode; } catch (error) { alert("getElementParentNode():Element is undefined"); return null; } } /***********************功能函数**************************/ //移动函数 //移动可拖动元素,并且在其接近目标元素时使目标元素的边框现实为红色。 function move(event,dragObj,targetElementAry) { var event=event || window.event; var obj=dragObj; if(Mouse.isDown) { //计算可拖动元素的x,y坐标. var left=Mouse.getMousePosition(event).x-parseInt(obj.getAttribute("difX")); var top=Mouse.getMousePosition(event).y-parseInt(obj.getAttribute("difY")); //判断可拖动元素的x,y坐标与目标元素坐标是否接近 for(i=0;i =0;j--) { obj.removeChild(obj.childNodes[j]); } } //初始化 function init() { //创建隐藏的拖动层 var dragObj=document.createElement("div"); dragObj.setAttribute("id","dragDiv"); dragObj.style.cssText="position:absolute;top:0px;left:0px;display:none;"; document.body.appendChild(dragObj); //创建目标数组 var targetElementAry=new Array(Element.getElement("one"),Element.getElement("two"),Element.getElement("three"),Element.getElement("four")); //添加事件 document.onmousedown=function(event) { var event=event || window.event; var obj=event.target || event.srcElement; if(obj.id=="main") { startDrag(event,dragObj,targetElementAry); } } //添加事件 //检查可移动元素的位置和目标元素的位置是否接近 //是,则将其移动到目标 //否,将其移动到原始位置 document.onmouseup=function() { Mouse.isDown=false; var left=parseInt(dragObj.style.left); var top=parseInt(dragObj.style.top); var index=-1; for(i=0;i -1) { var id=dragObj.getAttribute("originObj"); removeNodeChild(dragObj); dragObj.style.display="none"; var obj=Element.getElement(id); var node=obj.cloneNode(true); var parent=Element.getElementParentNode(obj); removeNodeChild(parent); targetElementAry[index].appendChild(node); targetElementAry[index].childNodes[0].style.display="block"; } else { var id=dragObj.getAttribute("originObj"); dragObj.style.left=dragObj.getAttribute("originLeft")+"px"; dragObj.style.top=dragObj.getAttribute("originTop")+"px" removeNodeChild(dragObj); dragObj.style.display="none"; if(id) { Element.getElement(id).style.display="block"; } } } } window.onload=init;
drag me
在绿色方块上按下鼠标,可以将其拖动,在方块的位置靠近某个方框并且方框的边线显示红色时,放开鼠标,方块会自动进入方框,其它位置放开鼠标,方块会返回上一次的位置。
[Ctrl+A 全选 注: 引入外部Js需再刷新一下页面才能执行 ]