<!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=gb2312" />
<meta http-equiv="content-language" content="zh-cn" />
<title>DIV拖拽</title>
<script type="text/javascript">
<!--
var IE=false,FF=false,W=window,D=document,H,B,GET="getElementsByTagName",GEI="getElementById",qq=0;
function fold(){
var e;
e=fixE(e);
if(e)element=fixElement(e);
element=element.parentNode.parentNode;
element.className=element.className.indexOf("hide")>0?"module":"module hide";
}
var Drag={
draging : false,
x : 0,
y : 0,
element : null,
fDiv : null,
ghost : null,
addEvent : function(){var a=D[GET]("li");for(var i=a.length-1;i>-1;i--)if(a[i].className=="module")a[i].onmousedown=Drag.dragStart;},
ix:2,iy:7,
ox:6,oy:7,
fx:6,fy:6,
dragStart : function (e){
   if(Drag.draging)return;
   var e;
   e=fixE(e);
   if(e)element=fixElement(e);   /*********
   var k,s="";
   for(k in element)s+=k+" : "+element[k]+"<br/>";
   D.getElementById("bbb").innerHTML=s;
   **********/
   D.getElementById("aaa").innerHTML=element.parentNode.offsetTop+ ","+element.parentNode.offsetHeight;
   //测试
   if(element.className!="title")return;
   element=element.parentNode;
   Drag.element=element;
   //以上获得当前移动的模块
   Drag.x=e.layerX?e.layerX+Drag.fx:(IE?e.x+Drag.ix:e.offsetX+Drag.ox);
   Drag.y=e.layerY?e.layerY+Drag.fy:(IE?e.y+Drag.iy:e.offsetY+Drag.oy);
   //鼠标相对于模块的位置
   Drop.measure();
   if(e.layerX){Drag.floatIt(e);Drag.drag(e);}//fix FF
   B.style.cursor="move";
   D.onmousemove=Drag.drag;
   D.ondragstart=function(){window.event.returnValue = false;}
   D.onselectstart=function(){window.event.returnValue = false;};
   D.onselect=function(){return false};
   D.onmouseup=element.onmouseup=Drag.dragEnd;
   element.onmousedown=null;
},
drag : function (e){
   var e;
   e=fixE(e);
   if(!Drag.fDiv)Drag.floatIt(e);//for IE & Opera
   var x=e.clientX,y=e.clientY;
   Drag.fDiv.style.top=y+H.scrollTop-Drag.y+"px";
   Drag.fDiv.style.left=x+H.scrollLeft-Drag.x+"px";
   Drop.drop(x,y);
   //statu(e);
},
dragEnd : function (e){
   B.style.cursor="";
   D.ondragstart=D.onmousemove=D.onselectstart=D.onselect=D.onmouseup=null;
   Drag.element.onmousedown=Drag.dragStart;
   if(!Drag.draging)return;
   Drag.ghost.parentNode.insertBefore(Drag.element,Drag.ghost);
   Drag.ghost.parentNode.removeChild(Drag.ghost);
   B.removeChild(Drag.fDiv);
   Drag.fDiv=null;
   Drag.draging=false;
   Drop.init(D[GEI]("container"));
},
floatIt : function(e){
   var e,element=Drag.element;
   var ghost=D.createElement("LI");
   Drag.ghost=ghost;
   ghost.className="module ghost";
   ghost.style.height=element.offsetHeight-2+"px";
   element.parentNode.insertBefore(ghost,element);
   //创建模块占位框
   var fDiv=D.createElement("UL");
   Drag.fDiv=fDiv;
   fDiv.className="float";
   B.appendChild(fDiv);
   fDiv.style.width=ghost.parentNode.offsetWidth+"px";
   fDiv.appendChild(element);
   //创建容纳模块的浮动层
   Drag.draging=true;
}
}
var Drop={
root : null,
index : null,
column : null,
init : function(it){
   if(!it)return;
   Drop.root=it;
   it.firstItem=it.lastItem=null;
   var a=it[GET]("ul");
   for(var i=0;i<a.length;i++){
    if(a[i].className!="column")continue;
    if(it.firstItem==null){
     it.firstItem=a[i];
     a[i].previousItem=null;
    }else{
     a[i].previousItem=a[i-1];
     a[i-1].nextItem=a[i];
    }
    a[i].nextItem=null;
    it.lastItem=a[i];
    a[i].index=i;
    a[i].firstItem=a[i].lastItem=null;
    var b=a[i][GET]("li");
    for(var j=0;j<b.length;j++){
     if(b[j].className.indexOf("module")==-1)continue;
     if(a[i].firstItem==null){
      a[i].firstItem=b[j];
      b[j].previousItem=null;
     }else{
      b[j].previousItem=b[j-1];
      b[j-1].nextItem=b[j];
     }
     b[j].nextItem=null;
     a[i].lastItem=b[j];
     b[j].index=i+","+j;
    }
   }
},
measure : function(){
   if(!Drop.root)return;
   var currentColumn=Drop.root.firstItem;
   while(currentColumn){
    var currentModule=currentColumn.firstItem;
    while(currentModule){
     currentModule.minY=currentModule.offsetTop;
     currentModule.maxY=currentModule.minY+currentModule.offsetHeight;
     currentModule=currentModule.nextItem;
    }
    currentColumn.minX=currentColumn.offsetLeft;
    currentColumn.maxX=currentColumn.minX+currentColumn.offsetWidth;
    currentColumn=currentColumn.nextItem;
   }
   Drop.index=Drag.element.index;
},
drop : function(x,y){
   if(!Drop.root)return;
   var x,y,currentColumn=Drop.root.firstItem;
   while(x>currentColumn.maxX)if(currentColumn.nextItem)currentColumn=currentColumn.nextItem;else break;
   var currentModule=currentColumn.lastItem;
   if(currentModule)while(y<currentModule.maxY){
    if(y>currentModule.minY-12){
     if(Drop.index==currentModule.index)return;
     Drop.index=currentModule.index;
     if(currentModule.index==Drag.element.index){if(currentModule.nextItem)currentModule=currentModule.nextItem;else break;}
     currentColumn.insertBefore(Drag.ghost,currentModule);
     Drop.column=null;
     window.status=qq++;
     return;
    }else if(currentModule.previousItem)currentModule=currentModule.previousItem;else return;
   }
   if(Drop.column==currentColumn.index)return;
   currentColumn.appendChild(Drag.ghost);
   Drop.index=0;
   Drop.column=currentColumn.index;
   window.status=qq++;
}
}
var webNote={
obj : null,
canEdit : function(e){
   var e,element;
   e=fixE(e);
   element=fixElement(e);
   if(element.className!='webNote')return;
   if(typeof element.contentEditable!="undefined"){
    element.contentEditable=true;
    element.style.borderColor='red';
    element.focus();
    webNote.obj=element;
   }
},
cannotEdit : function(){
   if(!webNote.obj)return;
   if(typeof webNote.obj.contentEditable!="undefined"){
    webNote.obj.style.borderColor='#ffffe0';
    webNote.obj.contentEditable=false;
    webNote.obj=null;
   }
}
}
function fixE(e){var e;e=e?e:(window.event?window.event:null);return e}
function fixElement(e){var e;return e.target?(e.target.nodeType==3?e.target.parentNode:e.target):e.srcElement;}
onload=function(){
B=D[GET]("body")[0];
H=D[GET]("html")[0];
Drop.init(D[GEI]("container"));
Drag.addEvent();
}
function statu(e){
var e,element;
element=fixElement(e);
var aa=D.getElementById("aaa");
aa.innerHTML="e.xy:("+e.x+","+e.y+")<br/>e.offsetXY:("+e.offsetX+","+e.offsetY+")<br/>e.clientXY:("+e.clientX+","+e.clientY+")<br/>element.offsetLeftTop:("+element.offsetLeft+","+element.offsetTop+")<br/>e.layerXY:("+e.layerX+","+e.layerY+")";
}
//-->
</script>
<style type="text/css">
body,table,td,th,input,textarea,button,select{font:13px/16px Verdana,"宋体",sans-serif;}
table{border-collapse:collapse;}
p{margin:0px;}
.container{margin:8px;}
.column{width:33%;margin:0px;padding:0px;float:left;overflow:hidden;}
.module{margin:5px;padding:0px;border:1px solid #dcd;position:relative;background-color:white;list-style:none;}
.title{background-color:#edf;padding:1px 0px;width:100%;overflow:hidden;cursor:move;z-index:0;font-weight:bold;}
.cont{padding:3px;overflow:hidden;}
.hide .cont{display:none;}
.pageTitle{font-weight:bold;text-align:center;}
input.pageTitle{display:none;border:0px;padding:0px;width:100%;}
.webNote{background-color:#ffffe0;border:1px solid #ffffe0;}
textarea.webNote{display:none;overflow:hidden;padding:0px;border:0px;padding:0px;}
.ghost{border:1px dashed red;}
.float{position:absolute;z-index:100;margin:0px;padding:0px;overflow:hidden;list-style:none;-moz-opacity:.75;filter:Alpha(opacity=75);}
</style>
<!--[if IE]>
<script type="text/javascript">
IE=true;
</script>
<style type="text/css">
input.pageTitle{margin:-1px;}
</style>
<![endif]-->
<![if !IE]><![endif]>
</head>
<body><div class="container" id="container">
<ul class="column">
   <li class="module">
    <div class="title"><span onclick="fold()">+</span>&nbsp;<span class="cont">1.1</span></div>
    <div class="cont" id="aaa">1.1</div>
   </li>
   <li class="module">
    <div class="title"><span onclick="fold()">+</span>&nbsp;2.1</div>
    <div class="cont" >2.1</div>
   </li>
   <li class="module">
    <div class="title"><span onclick="fold()">+</span>&nbsp;3.1</div>
    <div class="cont">3.1</div>
   </li>
</ul>
<ul class="column">
   <li class="module">
    <div class="title"><span onclick="fold()">+</span>&nbsp;1.2</div>
    <div class="cont">1.2</div>
   </li>
   <li class="module">
    <div class="title"><span onclick="fold()">+</span>&nbsp;2.2</div>
    <div class="cont">2.2
      <div class="webNote" onblur="webNote.cannotEdit()"onclick="webNote.canEdit(event)" >you can write someting</div>
      <textarea class="webNote"></textarea></div>
   </li>
   <li class="module">
    <div class="title"><span onclick="fold()">+</span>&nbsp;3.2</div>
    <div class="cont">3.2
     <center><a href="http://www.google.com" style="font:bold 31px/2 Arial;">Google</a></center>
    </div>
   </li>
</ul>
<ul class="column">
   <li class="module">
    <div class="title"><span onclick="fold()">+</span>&nbsp;1.3</div>
    <div class="cont">1.3</div>
   </li>
   <li class="module">
    <div class="title"><span onclick="fold()">+</span>&nbsp;2.3</div>
    <div class="cont">2.3</div>
   </li>
   <li class="module">
    <div class="title"><span onclick="fold()">+</span>&nbsp;3.3</div>
    <div class="cont" id="bbb">3.3</div>
   </li>
</ul>
</div>
</body>
</html>以上是源码, 真不知道该怎么实现cookies保存页面。哪位大侠帮我写一下cookies代码感激不尽!另,<div class="cont" id="aaa">1.1</div>  
如果单击其它窗口的标题,1.1窗口title会改变, 但如果去掉 id="aaa"  就不能拖拽了该如何解决呢?
谢谢。

解决方案 »

  1.   

    搜索找到这条语句,把它注释掉,或者删除就行了.
       D.getElementById("aaa").innerHTML=element.parentNode.offsetTop+ ","+element.parentNode.offsetHeight;
      

  2.   

    COOKIE存储布局的话,也恰恰就是利用这面这条里的两个数据,它们就是层的位置:
    element.parentNode.offsetTop+ ","+element.parentNode.offsetHeight;
    然后再加上层的ID就行了.至于存取COOKIE,有很多代码,随便找两个自定义函数放这.这样足够了,如果你还必须完全现成的代码,那你就不够再做甚至再学这行了吧.
    // 保存 Cookie
    function setCookie(name, value) {
    expires = new Date();
    expires.setTime(expires.getTime() + (1000 * 86400 * 365));
    document.cookie = name + "=" + escape(value) + "; expires=" + expires.toGMTString() + "; path=/";
    }// 获取 Cookie
    function getCookie(name) {
    cookie_name = name + "=";
    cookie_length = document.cookie.length;
    cookie_begin = 0;
    while (cookie_begin < cookie_length) {
    value_begin = cookie_begin + cookie_name.length;
    if (document.cookie.substring(cookie_begin, value_begin) == cookie_name) {
    var value_end = document.cookie.indexOf(";", value_begin);
    if (value_end == -1) {
    value_end = cookie_length;
    }
    return unescape(document.cookie.substring(value_begin, value_end));
    }
    cookie_begin = document.cookie.indexOf(" ", cookie_begin) + 1;
    if (cookie_begin == 0) {
    break;
    }
    }
    return null;
    }