類似google的可拖動div層網頁佈局,支持firefox,樣式可自定義

類似google的可拖動div層網頁佈局,支持firefox,樣式可自定義

 近來還是比較流行這種應用,而且論壇的人問得也多,每次去查很麻煩,就轉在這裏,方便查找。原文地址在下面。

  可能是我轉載的那個轉載的排版存在問題,不能直接運行。我進行了修改。現在的代碼可以直接運行了。

[xhtml] view plaincopy
  1. <html>  
  2. <head>  
  3.     <title>拖動div</title>  
  4.     <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
  5. <mce:style><!--  
  6.     body {  
  7.         margin: 0px;  
  8.         padding: 0px;  
  9.         font - size: 12px;  
  10.         text - align: center;  
  11.     }  
  12.     body > div {  
  13.         text - align: center;  
  14.         margin - right: auto;  
  15.         margin - left: auto;  
  16.     }.content {  
  17.         width: 900px;  
  18.     }.content.left {  
  19.         float: left;  
  20.         width: 20 % ;  
  21.         /*border:1px solid  
  22.             #FF0000;*/  
  23.         margin: 3px;  
  24.     }.content.center {  
  25.         float: left;  
  26.         /*border:1px solid  
  27.             #FF0000;*/  
  28.         margin: 3px;  
  29.         width: 57 %  
  30.     }.content.right {  
  31.         float: right;  
  32.         width: 20 % ;  
  33.         /*border:1px solid #FF0000;*/  
  34.         margin: 3px  
  35.     }.mo {  
  36.         height: auto;  
  37.         border: 1px solid#CCC;  
  38.         margin: 3px;  
  39.         background: #FFF  
  40.     }.mo h1 {  
  41.         background: #ECF9FF;  
  42.         height: 18px;  
  43.         padding: 3px;  
  44.         cursor: move;  
  45.     }.mo.nr {  
  46.         height: 80px;  
  47.         border: 1px solid#F3F3F3;  
  48.         margin: 2px  
  49.     }  
  50.     h1 {  
  51.         margin: 0px;  
  52.         padding: 0px;  
  53.         text - align: left;  
  54.         font - size: 12px  
  55.     }  
  56. --></mce:style><style mce_bogus="1"> body {  
  57.         margin: 0px;  
  58.         padding: 0px;  
  59.         font - size: 12px;  
  60.         text - align: center;  
  61.     }  
  62.     body > div {  
  63.         text - align: center;  
  64.         margin - right: auto;  
  65.         margin - left: auto;  
  66.     }.content {  
  67.         width: 900px;  
  68.     }.content.left {  
  69.         float: left;  
  70.         width: 20 % ;  
  71.         /*border:1px solid  
  72.             #FF0000;*/  
  73.         margin: 3px;  
  74.     }.content.center {  
  75.         float: left;  
  76.         /*border:1px solid  
  77.             #FF0000;*/  
  78.         margin: 3px;  
  79.         width: 57 %  
  80.     }.content.right {  
  81.         float: right;  
  82.         width: 20 % ;  
  83.         /*border:1px solid #FF0000;*/  
  84.         margin: 3px  
  85.     }.mo {  
  86.         height: auto;  
  87.         border: 1px solid#CCC;  
  88.         margin: 3px;  
  89.         background: #FFF  
  90.     }.mo h1 {  
  91.         background: #ECF9FF;  
  92.         height: 18px;  
  93.         padding: 3px;  
  94.         cursor: move;  
  95.     }.mo.nr {  
  96.         height: 80px;  
  97.         border: 1px solid#F3F3F3;  
  98.         margin: 2px  
  99.     }  
  100.     h1 {  
  101.         margin: 0px;  
  102.         padding: 0px;  
  103.         text - align: left;  
  104.         font - size: 12px  
  105.     }</style>  
  106.   
  107. <mce:script type="text/javascript"><!--  
  108.     var dragobj = {}  
  109.     window.onerror = function() {  
  110.         return false  
  111.     }  
  112.     //判斷瀏覽器  
  113.     function on_ini() {  
  114.         String.prototype.inc = function(s) {  
  115.             return this.indexOf(s) > -1 ? true: false  
  116.         }  
  117.         var agent = navigator.userAgent //取得瀏覽器信息  
  118.         window.isOpr = agent.inc("Opera");   
  119.         window.isIE = agent.inc("IE") && !isOpr;  
  120.         window.isMozagent.inc("Mozilla") && !isOpr && !isIE;  
  121.         if (isMoz) {  
  122.             Event.prototype.__defineGetter__("x",  
  123.             function() {  
  124.                 return this.clientX + 2  
  125.             })   
  126.             Event.prototype.__defineGetter__("y",  
  127.             function() {  
  128.                 return this.clientY + 2  
  129.             })  
  130.         }  
  131.         basic_ini()  
  132.     }  
  133.   
  134.     function basic_ini() {  
  135.         window.$ = function(obj) {  
  136.             return typeof(obj) == "string" ? document.getElementById(obj) : obj  
  137.         }  
  138.         window.oDel = function(obj) {  
  139.             if ($(obj) != null) {  
  140.                 $(obj).parentNode.removeChild($(obj))  
  141.             }  
  142.         }  
  143.     }  
  144.   
  145.     window.onload = function() {  
  146.         on_ini();   
  147.         var o = document.getElementsByTagName("h1");   
  148.         for (var i = 0; i < o.length; i++){  
  149.             o[i].onmousedown = function(e) {  
  150.                 if (dragobj.o != null) return false;   
  151.                 e = e || event;  
  152.                 dragobj.o = this.parentNode //上一層節點h1的div  
  153.                 dragobj.xy = getxy(dragobj.o);  
  154.                 dragobj.xx = new Array((e.x - dragobj.xy[1]), (e.y- dragobj.xy[0]));  
  155.                 dragobj.o.style.width = dragobj.xy[2] + "px" //div的寬  
  156.                 dragobj.o.style.height = dragobj.xy[3] + "px" //div的高  
  157.                 dragobj.o.style.left = (e.x - dragobj.xx[0]) + "px" //點擊時移動距左邊的位置  
  158.                     dragobj.o.style.top = (e.y - dragobj.xx[1]) + "px" //點擊時移動距頂部的位置  
  159.                 dragobj.o.style.position = "absolute";  
  160.                 dragobj.o.style.filter = 'alpha(opacity = 60)'; //拖動透明效果(IE)  
  161.                 dragobj.o.style.opacity = '0.6' //拖動透明效果(firefox)  
  162.                 var om = document.createElement("div")   
  163.                 dragobj.otemp = om   
  164.                 om.style.width = dragobj.xy[2] + "px"  
  165.                 om.style.height = dragobj.xy[3] + "px"  
  166.                 om.style.border = "1px dashed black"; //顯示虛線邊框  
  167.                 dragobj.o.parentNode.insertBefore(om, dragobj.o)   
  168.                 return false  
  169.             }  
  170.   
  171.         }  
  172.     }  
  173.   
  174.     document.onselectstart = function() {  
  175.         return false  
  176.     }  
  177.     window.onfocus = function() {  
  178.         document.onmouseup()  
  179.     }  
  180.     window.onblur = function() {  
  181.         document.onmouseup()  
  182.     }  
  183.   
  184.     document.onmouseup = function() {  
  185.         if (dragobj.o != null) {  
  186.             dragobj.o.style.width = "auto";  
  187.             dragobj.o.style.height = "auto";  
  188.             dragobj.otemp.parentNode.insertBefore(dragobj.o, dragobj.otemp);  
  189.             dragobj.o.style.position = "";  
  190.             oDel(dragobj.otemp);  
  191.             dragobj={};  
  192.         }  
  193.     }  
  194.   
  195.     document.onmousemove=function(e)  
  196.     {  
  197.         e=e||event  
  198.         if(dragobj.o!=null){  
  199.             dragobj.o.style.left=(e.x-dragobj.xx[0])+"px"  
  200.             dragobj.o.style.top=(e.y-dragobj.xx[1])+"px"  
  201.             createtmpl(e)  
  202.         }  
  203.     }  
  204.       
  205.     function getxy(e)  
  206.     {  
  207.         var a=new Array()  
  208.         var t=e.offsetTop;//e距離上方或上層控件的位置,整型  
  209.         var l=e.offsetLeft;//e距離左方或上層控件的位置,整型  
  210.         var w=e.offsetWidth;  
  211.         var h=e.offsetHeight;  
  212.         while(e=e.offsetParent){//offsetParent是body因爲沒有相對或絕對定位  
  213.             t+=e.offsetTop;  
  214.             l+=e.offsetLeft;  
  215.         }  
  216.         a[0]=t;a[1]=l;a[2]=w;a[3]=h  
  217.         return a;  
  218.     }  
  219.       
  220.     function inner(o,e)  
  221.     {  
  222.         var a=getxy(o)  
  223.         if(e.x>a[1]&&e.x<(a[1]+a[2])&&e.y>a[0]&&e.y<(a[0]+a[3])){  
  224.             if(e.y<(a[0]+a[3]/2)) return 1;  
  225.             else return 2;  
  226.         }else return 0;  
  227.     }  
  228.       
  229.     function createtmpl(e)  
  230.     {  
  231.         var k = document.getElementsByTagName("h1")  
  232.         for(var i=0;i<k.length;i++){  
  233.             if($("m"+i)==dragobj.o) continue  
  234.             var b=inner($("m"+i),e)  
  235.             if(b==0) continue  
  236.             dragobj.otemp.style.width=$("m"+i).offsetWidth  
  237.             //移動 1:下 2:上  
  238.             if(b==1){  
  239.                 $("m"+i).parentNode.insertBefore(dragobj.otemp,$("m"+i))  
  240.             }else{  
  241.                 if($("m"+i).nextSibling==null){  
  242.                     $("m"+i).parentNode.appendChild(dragobj.otemp)  
  243.                 }else{  
  244.                     $("m"+i).parentNode.insertBefore(dragobj.otemp,$("m"+i).nextSibling)  
  245.                 }  
  246.             }  
  247.             return  
  248.         }  
  249.         for(var j=0;j<3;j++){  
  250.             if($("dom"+j).innerHTML.inc("div")||$("dom"+j).innerHTML.inc("DIV")) continue;  
  251.             var op=getxy($("dom"+j))  
  252.             if(e.x>(op[1]+10)&&e.x<(op[1]+op[2]-10)){  
  253.                 $("dom"+j).appendChild(dragobj.otemp)  
  254.                 dragobj.otemp.style.width=(op[2]-10)+"px"  
  255.             }  
  256.         }  
  257.     }  
  258. // --></mce:script>  
  259. </head>  
  260. <body>  
  261. <div class=content>  
  262.     <div class=left id=dom0>  
  263.         <div class=mo id=m0><h1>dom0</h1><div class="nr"></div></div>  
  264.         <div class=mo id=m1><h1>dom1</h1><div class="nr"></div></div>  
  265.         <div class=mo id=m2><h1>dom2</h1><div class="nr"></div></div>  
  266.         <div class=mo id=m3><h1>dom3</h1><div class="nr"></div></div>  
  267.     </div>  
  268.     <div class=center id=dom1>  
  269.         <div class=mo id=m4><h1>dom4</h1><div class="nr"></div></div>  
  270.         <div class=mo id=m5><h1>dom5</h1><div class="nr"></div></div>  
  271.         <div class=mo id=m6><h1>dom6</h1><div class="nr"></div></div>  
  272.         <div class=mo id=m7><h1>dom7</h1><div class="nr"></div></div>  
  273.     </div>  
  274.     <div class=right id=dom2>  
  275.         <div class=mo id=m8><h1>dom8</h1><div class="nr"></div></div>  
  276.         <div class=mo id=m9><h1>dom9</h1><div class="nr"></div></div>  
  277.         <div class=mo id=m10><h1>dom10</h1><div class="nr"></div></div>  
  278.         <div class=mo id=m11><h1>dom11</h1><div class="nr"></div></div>  
  279.         <div class=mo id=m12><h1>dom12</h1><div class="nr"></div></div>  
  280.     </div>  
  281. </div>  
  282. </body>  
  283.   
  284. </html>  

 

原文地址:http://www.corange.cn/archives/2008/12/2757.html

發佈了5 篇原創文章 · 獲贊 0 · 訪問量 7845
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章