类似Chinaren首页栏目可拖动效果的源码

    技术2022-05-11  116

    类似Chinaren首页栏目可拖动效果的源码

    注:本文摘编自网络( 经典论坛) ,文责版权为原作者所有,本人仅作学习收藏。 代码原理为拖动DIV并保存,未使用server技术。 源代码如下: <!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"> <title>Drag & Drop</title> <style type="text/css"> body{ background-color:#36393D; font-size:12px; margin:0px; } DIV.dragLayer{     border:1px solid #369;     background-color:#6BBA70;     margin-bottom:10px; } DIV.dragLayer_over{     border:1px solid #C79810;     background-color:#6BBA70;     filter:alpha(opacity=80);     -moz-opacity:0.8; /* Moz + FF */     opacity: 0.8; /* 支持CSS3的浏览器(FF 1.5也支持)*/ } DIV.clone_dragLayer_over{     border:1px dashed #FA0;     background-color:#6BBA70;     filter:alpha(opacity=80);     -moz-opacity:0.8; /* Moz + FF */     opacity: 0.8; /* 支持CSS3的浏览器(FF 1.5也支持)*/     margin-bottom:10px; } DIV.dragHeader{     width:100%; height:20px ; line-height:20px; background-color:#006E2E; color:#FFFFFF; } DIV.dragHeader_over{     width:100%; height:20px ; line-height:20px; background-color:#C79810; } SPAN.min,SPAN.close{cursor:pointer;font-family:Webdings} #container{margin:0px} #leftcontainer{float:left;  width:33%;} #middlecontainer{float:left; width:34%;} #middlecontainer div{margin-left:auto; margin-right:auto} #rightcontainer{float:right; width:33%;} #rightcontainer div{float:right} DIV.content{width:100%; padding:4px} </style> <script type="text/javascript"> var CoolDrag={     obj : null, //目标对象     cloneobj : null, //拖动对象     container : null, //容器     dragged : false, //拖动标志     shadow: null, //阴影         init:function(id){         CoolDrag.container = $(id);         var cooldrag = CoolDrag.read("cooldrag");         if(cooldrag != ""){//读取cookie             var subcontainer = cooldrag.split("|");             for(var i=0 ; i < subcontainer.length; i++){                 var subcontainerItem = subcontainer[i].split(":");                 if($(subcontainerItem[0])){                     var items = subcontainerItem[1].split(",");                     for(var j=0; j< items.length; j++){                         if($(items[j])) $(subcontainerItem[0]).appendChild($(items[j]));                     }                 }             }         }         cleanWhitespace(CoolDrag.container)//清除空白节点         var collection = CoolDrag.container.getElementsByTagName("DIV");         for(var i = 0; i < collection.length; i++){             if(collection[i].className == "dragLayer"){                 var o = collection[i].firstChild;                            SavedObject.push([o.parentNode.id,1,o.parentNode.style.height]);                 o.onmousedown = CoolDrag.start;             }         }         document.onmousemove = CoolDrag.drag;         document.onmouseup = CoolDrag.end;     },         start:function(e){         if(!e) e = window.event;         var obj = getT(e);         if(obj.className == "min"){             CoolDrag.min(e);             return;         }else if(obj.className == "close"){             CoolDrag.close(e);             return;         }else{             if(obj.className != "dragHeader") obj = obj.parentNode;         }         CoolDrag.dragged = true;         CoolDrag.obj = obj.parentNode;         CoolDrag.cloneobj = CoolDrag.obj.cloneNode(true);         document.body.appendChild(CoolDrag.cloneobj);         CoolDrag.shadow = document.createElement("DIV");         document.body.appendChild(CoolDrag.shadow);         with(CoolDrag.cloneobj.style){             position = "absolute";             zIndex = 1000;             left = getRealLeft(CoolDrag.obj) + "px";             top = getRealTop(CoolDrag.obj) + "px";         }         with(CoolDrag.shadow.style){             position = "absolute";             zIndex = 999;             left = getRealLeft(CoolDrag.obj) + 4 + "px";             top = getRealTop(CoolDrag.obj) + 4 + "px";             width = CoolDrag.obj.offsetWidth + "px";             height = CoolDrag.obj.offsetHeight + "px";             backgroundColor = "#ccc";             if(navigator.userAgent.indexOf("Gecko") != -1)                 MozOpacity = "0.5";             else if(navigator.userAgent.indexOf("MSIE") != -1)                 filter = "alpha(opacity=50)";         }                 CoolDrag.cloneobj.initMouseX = getMouseX(e);         CoolDrag.cloneobj.initMouseY    = getMouseY(e);         CoolDrag.cloneobj.initoffsetL = getRealLeft(CoolDrag.obj);         CoolDrag.cloneobj.initoffsetY = getRealTop(CoolDrag.obj);         //change style         CoolDrag.cloneobj.firstChild.className="dragHeader_over";         CoolDrag.cloneobj.className = "dragLayer_over";         CoolDrag.obj.className="clone_dragLayer_over";     },         drag:function(e){         if(!CoolDrag.dragged||CoolDrag.obj==null)return;         if(!e) e = window.event;         var currenX = getMouseX(e);         var currenY = getMouseY(e);                 if(CoolDrag.cloneobj.initoffsetL +  currenX - CoolDrag.cloneobj.initMouseX > getRealLeft(CoolDrag.container))             CoolDrag.cloneobj.style.left = (CoolDrag.cloneobj.initoffsetL +  currenX - CoolDrag.cloneobj.initMouseX) + "px";         else             CoolDrag.cloneobj.style.left = getRealLeft(CoolDrag.container) + "px";         if(CoolDrag.cloneobj.initoffsetY +  currenY - CoolDrag.cloneobj.initMouseY > getRealTop(CoolDrag.container))             CoolDrag.cloneobj.style.top = (CoolDrag.cloneobj.initoffsetY +  currenY - CoolDrag.cloneobj.initMouseY) + "px";         else             CoolDrag.cloneobj.style.top = getRealTop(CoolDrag.container) + "px";         var collection = CoolDrag.container.getElementsByTagName("DIV");         var finded = false;         for(var i = 0; i < collection.length; i++){             var o = collection[i];             if(o.className == "dragLayer"){                 if(((getRealLeft(o) <= CoolDrag.cloneobj.offsetLeft &&  getRealLeft(o) + o.offsetWidth >= CoolDrag.cloneobj.offsetLeft) ||                          (getRealLeft(o) <= CoolDrag.cloneobj.offsetLeft + CoolDrag.cloneobj.offsetWidth &&                 getRealLeft(o) + o.offsetWidth >= CoolDrag.cloneobj.offsetLeft + CoolDrag.cloneobj.offsetWidth)) &&                    getRealTop(o) <= CoolDrag.cloneobj.offsetTop && getRealTop(o) + o.offsetHeight >= CoolDrag.cloneobj.offsetTop)                 {                     //window.status = getRealTop(o.parentNode)+"|"+(CoolDrag.cloneobj.offsetTop - 8);                     if(getRealTop(o.parentNode) >= CoolDrag.cloneobj.offsetTop - 8){                         o.parentNode.insertBefore(CoolDrag.obj,o);                     }else{                         if(o.nextSibling)                             o.parentNode.insertBefore(CoolDrag.obj,o.nextSibling);                         else                             o.parentNode.appendChild(CoolDrag.obj);                     }                        finded = true;                     break;                 }                }         }         if(!finded){             for(var i = 0; i < CoolDrag.container.childNodes.length; i++){                 var o = CoolDrag.container.childNodes[i];                 if(getRealLeft(o) <= CoolDrag.cloneobj.offsetLeft &&  getRealLeft(o) + o.offsetWidth >= CoolDrag.cloneobj.offsetLeft)                     o.appendChild(CoolDrag.obj);             }         }         with(CoolDrag.shadow.style){             left = (CoolDrag.cloneobj.offsetLeft + 4) + "px";             top = (CoolDrag.cloneobj.offsetTop + 4) + "px";         }         //document.title = CoolDrag.cloneobj.style.left + "|" + CoolDrag.shadow.style.left;     },         end:function(e){         if(!CoolDrag.dragged)return;         CoolDrag.obj.className = "dragLayer";         CoolDrag.dragged = false;         CoolDrag.shadow.parentNode.removeChild(CoolDrag.shadow);         CoolDrag.timer = CoolDrag.repos(150,15);         //保存cookie         var str="";         for(var i=0; i<CoolDrag.container.childNodes.length; i++){             var o = CoolDrag.container.childNodes[i];             if(i>0)str += "|";             str += o.id + ":";             for(var j=0; j < o.childNodes.length; j++){                 if(j>0)str += ",";                 str += o.childNodes[j].id ;             }         }         CoolDrag.save("cooldrag",str,24);     },     repos:function(aa,ab){         //var f=CoolDrag.obj.filters.alpha.opacity;         var tl=getRealLeft(CoolDrag.cloneobj);         var tt=getRealTop(CoolDrag.cloneobj);         var kl=(tl-getRealLeft(CoolDrag.obj))/ab;         var kt=(tt-getRealTop(CoolDrag.obj))/ab;         //var kf=f/ab;         return setInterval(function(){if(ab<1){                                 clearInterval(CoolDrag.timer);                                 CoolDrag.cloneobj.parentNode.removeChild(CoolDrag.cloneobj);                                 CoolDrag.obj=null;                                 return;                             }                         ab--;                         tl-=kl;                         tt-=kt;                         //f-=kf;                         CoolDrag.cloneobj.style.left=parseInt(tl)+"px";                         CoolDrag.cloneobj.style.top=parseInt(tt)+"px";                         //CoolDrag.tdiv.filters.alpha.opacity=f;                     }     ,aa/ab)     },     min:function(e){         if(!e) e = window.event;         var obj = getT(e);         var rootObj = obj.parentNode.parentNode.parentNode;         var id = rootObj.id;         if(SavedObject.getStatus(id)[1]){                SavedObject.setStatus(id,0);              rootObj.style.height = "20px";             rootObj.childNodes[1].style.display = 'none';            }else{             SavedObject.setStatus(id,1);              rootObj.lastChild.style.display = '';                rootObj.style.height = SavedObject.getStatus(id)[2];         }         obj.innerHTML = obj.innerHTML==0 ? 2 :0;     },     close:function(e){         if(!e) e = window.event;         var obj = getT(e);         var rootObj = obj.parentNode.parentNode.parentNode;         rootObj.parentNode.removeChild(rootObj);     },     save:function(name, value, hours){         var expire = "";         if(hours != null)         {         expire = new Date((new Date()).getTime() + hours * 3600000);         expire = "; expires=" + expire.toGMTString();         }         document.cookie = name  + "=" + escape(value) + expire;     },     read:function(name){         var cookieValue = "";         var search = name + "=";         if(document.cookie.length > 0)         {         offset = document.cookie.indexOf(search);         if (offset != -1)         {           offset += search.length;           end = document.cookie.indexOf(";", offset);           if (end == -1) end = document.cookie.length;           cookieValue = unescape(document.cookie.substring(offset, end))         }         }         return cookieValue;     } } function $(id){     return document.getElementById(id); } function getT(e){     return e.target || e.srcElement; } function getMouseX(e){     return e.pageX ? e.pageX : e.clientX + document.body.scrollLeft - document.body.clientLeft; } function getMouseY(e){     return e.pageY ? e.pageY : e.clientY + document.body.scrollTop  - document.body.clientTop; } function getRealLeft(o){     var l = 0;     while(o){         l += o.offsetLeft - o.scrollLeft;         o = o.offsetParent;     }     return(l); } function getRealTop(o){     var t = 0;     while(o){         t += o.offsetTop - o.scrollTop;         o = o.offsetParent;     }     return(t); } function cleanWhitespace(node) {      var notWhitespace = //S/;      for (var i=0; i < node.childNodes.length; i++) {          var childNode = node.childNodes[i];          if ((childNode.nodeType == 3)&&(!notWhitespace.test(childNode.nodeValue))) {              node.removeChild(node.childNodes[i]);              i--;          }          if (childNode.nodeType == 1) {              cleanWhitespace(childNode);          }      } } var SavedObject={     elements : new Array(),     setStatus : function(id,s){         for(var i=0;i<SavedObject.elements.length;i++){             if(SavedObject.elements[i][0]==id){                 SavedObject.elements[i][1]=s;                 break;             }         }     },     getStatus : function(id){         for(var i=0;i<SavedObject.elements.length;i++){             if(SavedObject.elements[i][0]==id)return SavedObject.elements[i];         }     },     push : function(o){         SavedObject.elements[SavedObject.elements.length]=o;     } } </script> </head> <body onLoad="CoolDrag.init('container');"> <br /> <div id="container"> <div id="leftcontainer">     <div style="height:100px; width:200px; " class="dragLayer" id="win1">         <div class="dragHeader">             <div style="float:left">第一个窗口</div>             <div style="float:right; "><span class="min">0</span><span class="close">r</span></div>         </div>         <div class="content">window 1</div>     </div>     <div style="height:100px; width:200px; " class="dragLayer" id="win2">         <div class="dragHeader">             <div style="float:left">第二个窗口</div>             <div style="float:right; "><span class="min">0</span><span class="close">r</span></div>         </div>         <div class="content">window 2</div>     </div> </div> <div id="middlecontainer">     <div style="height:100px; width:200px; " class="dragLayer" id="win3">         <div class="dragHeader">             <div style="float:left">第三个窗口</div>             <div style="float:right; "><span class="min">0</span><span class="close">r</span></div>         </div>         <div class="content">window 3</div>     </div>     <div style="height:100px; width:200px; " class="dragLayer" id="win4">         <div class="dragHeader">             <div style="float:left">第四个窗口</div>             <div style="float:right; "><span class="min">0</span><span class="close">r</span></div>         </div>         <div class="content">window 4</div>     </div> </div> <div id="rightcontainer">     <div style="height:100px; width:200px; " class="dragLayer" id="win5">         <div class="dragHeader">             <div style="float:left">第五个窗口</div>             <div style="float:right; "><span class="min">0</span><span class="close">r</span></div>         </div>         <div class="content">window 5</div>     </div>     <div style="height:100px; width:200px; " class="dragLayer" id="win6">         <div class="dragHeader">             <div style="float:left">第六个窗口</div>             <div style="float:right; "><span class="min">0</span><span class="close">r</span></div>         </div>         <div class="content">window 6</div>     </div>     <div style="height:100px; width:200px; " class="dragLayer" id="win7">         <div class="dragHeader">             <div style="float:left">第七个窗口</div>             <div style="float:right; "><span class="min">0</span><span class="close">r</span></div>         </div>         <div class="content">window 7</div>     </div> </div> </div> </body> </html>

    最新回复(0)