设计学院-ui163 致力于网页标准 网页设计 web标准与ui设计。

拖动DIV如何保存的问题

上一篇上一篇 | 下一篇下一篇发表时间:2007-9-9 22:49:28

<script type="text/javascript" src="/js/textarea.js"></script>
<div class="text_runbox"><p class="text_run1">Source Code to Run</p>
<SPAN><TEXTAREA rows=5 cols=60>
<p><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><br>
<html xmlns="http://www.w3.org/1999/xhtml"><br>
<head><br>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"><br>
<title>Drag & Drop</title><br>
<style type="text/css"><br>
body{ background-color:#36393D; font-size:12px; margin:0px; }<br>
DIV.dragLayer{<br>
border:1px solid #369;<br>
background-color:#6BBA70;<br>
margin-bottom:10px;<br>
}<br>
DIV.dragLayer_over{<br>
border:1px solid #C79810;<br>
background-color:#6BBA70;<br>
filter:alpha(opacity=80);<br>
-moz-opacity:0.8; /* Moz + FF */<br>
opacity: 0.8; /* 支持CSS3的浏览器(FF 1.5也支持)*/<br>
}<br>
DIV.clone_dragLayer_over{<br>
border:1px dashed #FA0;<br>
background-color:#6BBA70;<br>
filter:alpha(opacity=80);<br>
-moz-opacity:0.8; /* Moz + FF */<br>
opacity: 0.8; /* 支持CSS3的浏览器(FF 1.5也支持)*/<br>
margin-bottom:10px;<br>
}<br>
DIV.dragHeader{<br>
width:100%; height:20px ; line-height:20px; background-color:#006E2E;
color:#FFFFFF;<br>
}<br>
DIV.dragHeader_over{<br>
width:100%; height:20px ; line-height:20px; background-color:#C79810;<br>
}<br>
SPAN.min,SPAN.close{cursor:pointer;font-family:Webdings}<br>
#container{margin:0px}<br>
#leftcontainer{float:left; width:33%;}<br>
#middlecontainer{float:left; width:34%;}<br>
#middlecontainer div{margin-left:auto; margin-right:auto}<br>
#rightcontainer{float:right; width:33%;}<br>
#rightcontainer div{float:right}<br>
DIV.content{width:100%; padding:4px}<br>
</style><br>
<script type="text/javascript"><br>
var CoolDrag={<br>
obj : null, //目标对象<br>
cloneobj : null, //拖动对象<br>
container : null, //容器<br>
dragged : false, //拖动标志<br>
shadow: null, //阴影<br>
<br>
init:function(id){<br>
CoolDrag.container = $(id);<br>
var cooldrag = CoolDrag.read("cooldrag");<br>
if(cooldrag != ""){//读取cookie<br>
var subcontainer = cooldrag.split("|");<br>
for(var i=0 ; i < subcontainer.length; i++){<br>
var subcontainerItem = subcontainer[i].split(":");<br>
if($(subcontainerItem[0])){<br>
var items = subcontainerItem[1].split(",");<br>
for(var j=0; j< items.length; j++){<br>
if($(items[j])) $(subcontainerItem[0]).appendChild($(items[j]));<br>
}<br>
}<br>
}<br>
}<br>
cleanWhitespace(CoolDrag.container)//清除空白节点<br>
var collection = CoolDrag.container.getElementsByTagName("DIV");<br>
for(var i = 0; i < collection.length; i++){<br>
if(collection[i].className == "dragLayer"){<br>
var o = collection[i].firstChild; <br>
SavedObject.push([o.parentNode.id,1,o.parentNode.style.height]);<br>
o.onmousedown = CoolDrag.start;<br>
}<br>
}<br>
document.onmousemove = CoolDrag.drag;<br>
document.onmouseup = CoolDrag.end;<br>
},<br>
<br>
start:function(e){<br>
if(!e) e = window.event;<br>
var obj = getT(e);<br>
if(obj.className == "min"){<br>
CoolDrag.min(e);<br>
return;<br>
}else if(obj.className == "close"){<br>
CoolDrag.close(e);<br>
return;<br>
}else{<br>
if(obj.className != "dragHeader") obj = obj.parentNode;<br>
}<br>
CoolDrag.dragged = true;<br>
CoolDrag.obj = obj.parentNode;<br>
CoolDrag.cloneobj = CoolDrag.obj.cloneNode(true);<br>
document.body.appendChild(CoolDrag.cloneobj);<br>
CoolDrag.shadow = document.createElement("DIV");<br>
document.body.appendChild(CoolDrag.shadow);<br>
with(CoolDrag.cloneobj.style){<br>
position = "absolute";<br>
zIndex = 1000;<br>
left = getRealLeft(CoolDrag.obj) + "px";<br>
top = getRealTop(CoolDrag.obj) + "px";<br>
}<br>
with(CoolDrag.shadow.style){<br>
position = "absolute";<br>
zIndex = 999;<br>
left = getRealLeft(CoolDrag.obj) + 4 + "px";<br>
top = getRealTop(CoolDrag.obj) + 4 + "px";<br>
width = CoolDrag.obj.offsetWidth + "px";<br>
height = CoolDrag.obj.offsetHeight + "px";<br>
backgroundColor = "#ccc";<br>
if(navigator.userAgent.indexOf("Gecko") != -1)<br>
MozOpacity = "0.5";<br>
else if(navigator.userAgent.indexOf("MSIE") != -1)<br>
filter = "alpha(opacity=50)";<br>
}<br>
<br>
CoolDrag.cloneobj.initMouseX = getMouseX(e);<br>
CoolDrag.cloneobj.initMouseY = getMouseY(e);<br>
CoolDrag.cloneobj.initoffsetL = getRealLeft(CoolDrag.obj);<br>
CoolDrag.cloneobj.initoffsetY = getRealTop(CoolDrag.obj);<br>
//change style<br>
CoolDrag.cloneobj.firstChild.className="dragHeader_over";<br>
CoolDrag.cloneobj.className = "dragLayer_over";<br>
CoolDrag.obj.className="clone_dragLayer_over";<br>
},<br>
<br>
drag:function(e){<br>
if(!CoolDrag.dragged||CoolDrag.obj==null)return;<br>
if(!e) e = window.event;<br>
var currenX = getMouseX(e);<br>
var currenY = getMouseY(e);<br>
<br>
if(CoolDrag.cloneobj.initoffsetL + currenX - CoolDrag.cloneobj.initMouseX >
getRealLeft(CoolDrag.container))<br>
CoolDrag.cloneobj.style.left = (CoolDrag.cloneobj.initoffsetL + currenX -
CoolDrag.cloneobj.initMouseX) + "px";<br>
else<br>
CoolDrag.cloneobj.style.left = getRealLeft(CoolDrag.container) + "px";<br>
if(CoolDrag.cloneobj.initoffsetY + currenY - CoolDrag.cloneobj.initMouseY >
getRealTop(CoolDrag.container))<br>
CoolDrag.cloneobj.style.top = (CoolDrag.cloneobj.initoffsetY + currenY -
CoolDrag.cloneobj.initMouseY) + "px";<br>
else<br>
CoolDrag.cloneobj.style.top = getRealTop(CoolDrag.container) + "px";<br>
var collection = CoolDrag.container.getElementsByTagName("DIV");<br>
var finded = false;<br>
for(var i = 0; i < collection.length; i++){<br>
var o = collection[i];<br>
if(o.className == "dragLayer"){<br>
if(((getRealLeft(o) <= CoolDrag.cloneobj.offsetLeft && getRealLeft(o) +
o.offsetWidth >= CoolDrag.cloneobj.offsetLeft) || <br>
(getRealLeft(o) <= CoolDrag.cloneobj.offsetLeft + CoolDrag.cloneobj.offsetWidth
&&<br>
getRealLeft(o) + o.offsetWidth >= CoolDrag.cloneobj.offsetLeft +
CoolDrag.cloneobj.offsetWidth)) &&<br>
getRealTop(o) <= CoolDrag.cloneobj.offsetTop && getRealTop(o) + o.offsetHeight
>= CoolDrag.cloneobj.offsetTop)<br>
{<br>
//window.status = getRealTop(o.parentNode)+"|"+(CoolDrag.cloneobj.offsetTop -
8);<br>
if(getRealTop(o.parentNode) >= CoolDrag.cloneobj.offsetTop - 8){<br>
o.parentNode.insertBefore(CoolDrag.obj,o);<br>
}else{<br>
if(o.nextSibling)<br>
o.parentNode.insertBefore(CoolDrag.obj,o.nextSibling);<br>
else<br>
o.parentNode.appendChild(CoolDrag.obj);<br>
} <br>
finded = true;<br>
break;<br>
} <br>
}<br>
}<br>
if(!finded){<br>
for(var i = 0; i < CoolDrag.container.childNodes.length; i++){<br>
var o = CoolDrag.container.childNodes[i];<br>
if(getRealLeft(o) <= CoolDrag.cloneobj.offsetLeft && getRealLeft(o) +
o.offsetWidth >= CoolDrag.cloneobj.offsetLeft)<br>
o.appendChild(CoolDrag.obj);<br>
}<br>
}<br>
with(CoolDrag.shadow.style){<br>
left = (CoolDrag.cloneobj.offsetLeft + 4) + "px";<br>
top = (CoolDrag.cloneobj.offsetTop + 4) + "px";<br>
}<br>
//document.title = CoolDrag.cloneobj.style.left + "|" +
CoolDrag.shadow.style.left;<br>
},<br>
<br>
end:function(e){<br>
if(!CoolDrag.dragged)return;<br>
CoolDrag.obj.className = "dragLayer";<br>
CoolDrag.dragged = false;<br>
CoolDrag.shadow.parentNode.removeChild(CoolDrag.shadow);<br>
CoolDrag.timer = CoolDrag.repos(150,15);<br>
//保存cookie<br>
var str="";<br>
for(var i=0; i<CoolDrag.container.childNodes.length; i++){<br>
var o = CoolDrag.container.childNodes[i];<br>
if(i>0)str += "|";<br>
str += o.id + ":";<br>
for(var j=0; j < o.childNodes.length; j++){<br>
if(j>0)str += ",";<br>
str += o.childNodes[j].id ;<br>
}<br>
}<br>
CoolDrag.save("cooldrag",str,24);<br>
},<br>
repos:function(aa,ab){<br>
//var f=CoolDrag.obj.filters.alpha.opacity;<br>
var tl=getRealLeft(CoolDrag.cloneobj);<br>
var tt=getRealTop(CoolDrag.cloneobj);<br>
var kl=(tl-getRealLeft(CoolDrag.obj))/ab;<br>
var kt=(tt-getRealTop(CoolDrag.obj))/ab;<br>
//var kf=f/ab;<br>
return setInterval(function(){if(ab<1){<br>
clearInterval(CoolDrag.timer);<br>
CoolDrag.cloneobj.parentNode.removeChild(CoolDrag.cloneobj);<br>
CoolDrag.obj=null;<br>
return;<br>
}<br>
ab--;<br>
tl-=kl;<br>
tt-=kt;<br>
//f-=kf;<br>
CoolDrag.cloneobj.style.left=parseInt(tl)+"px";<br>
CoolDrag.cloneobj.style.top=parseInt(tt)+"px";<br>
//CoolDrag.tdiv.filters.alpha.opacity=f;<br>
}<br>
,aa/ab)<br>
},<br>
min:function(e){<br>
if(!e) e = window.event;<br>
var obj = getT(e);<br>
var rootObj = obj.parentNode.parentNode.parentNode;<br>
var id = rootObj.id;<br>
if(SavedObject.getStatus(id)[1]){ <br>
SavedObject.setStatus(id,0); <br>
rootObj.style.height = "20px";<br>
rootObj.childNodes[1].style.display = 'none'; <br>
}else{<br>
SavedObject.setStatus(id,1); <br>
rootObj.lastChild.style.display = ''; <br>
rootObj.style.height = SavedObject.getStatus(id)[2]; <br>
}<br>
obj.innerHTML = obj.innerHTML==0 ? 2 :0;<br>
},<br>
close:function(e){<br>
if(!e) e = window.event;<br>
var obj = getT(e);<br>
var rootObj = obj.parentNode.parentNode.parentNode;<br>
rootObj.parentNode.removeChild(rootObj);<br>
},<br>
save:function(name, value, hours){<br>
var expire = "";<br>
if(hours != null)<br>
{<br>
expire = new Date((new Date()).getTime() + hours * 3600000);<br>
expire = "; expires=" + expire.toGMTString();<br>
}<br>
document.cookie = name + "=" + escape(value) + expire;<br>
},<br>
read:function(name){<br>
var cookieValue = "";<br>
var search = name + "=";<br>
if(document.cookie.length > 0)<br>
{ <br>
offset = document.cookie.indexOf(search);<br>
if (offset != -1)<br>
{ <br>
offset += search.length;<br>
end = document.cookie.indexOf(";", offset);<br>
if (end == -1) end = document.cookie.length;<br>
cookieValue = unescape(document.cookie.substring(offset, end))<br>
}<br>
}<br>
return cookieValue;<br>
}<br>
}<br>
function $(id){<br>
return document.getElementById(id);<br>
}<br>
function getT(e){<br>
return e.target || e.srcElement;<br>
}<br>
function getMouseX(e){<br>
return e.pageX ? e.pageX : e.clientX + document.body.scrollLeft -
document.body.clientLeft;<br>
}<br>
function getMouseY(e){<br>
return e.pageY ? e.pageY : e.clientY + document.body.scrollTop -
document.body.clientTop;<br>
}<br>
function getRealLeft(o){<br>
var l = 0;<br>
while(o){<br>
l += o.offsetLeft - o.scrollLeft;<br>
o = o.offsetParent;<br>
}<br>
return(l);<br>
}<br>
function getRealTop(o){<br>
var t = 0;<br>
while(o){<br>
t += o.offsetTop - o.scrollTop;<br>
o = o.offsetParent;<br>
}<br>
return(t);<br>
}<br>
function cleanWhitespace(node) {<br>
var notWhitespace = /\S/;<br>
for (var i=0; i < node.childNodes.length; i++) {<br>
var childNode = node.childNodes[i];<br>
if ((childNode.nodeType == 3)&&(!notWhitespace.test(childNode.nodeValue))) {<br>
node.removeChild(node.childNodes[i]);<br>
i--;<br>
}<br>
if (childNode.nodeType == 1) {<br>
cleanWhitespace(childNode);<br>
}<br>
}<br>
}<br>
var SavedObject={<br>
elements : new Array(),<br>
setStatus : function(id,s){<br>
for(var i=0;i<SavedObject.elements.length;i++){<br>
if(SavedObject.elements[i][0]==id){<br>
SavedObject.elements[i][1]=s;<br>
break;<br>
}<br>
}<br>
},<br>
getStatus : function(id){<br>
for(var i=0;i<SavedObject.elements.length;i++){<br>
if(SavedObject.elements[i][0]==id)return SavedObject.elements[i];<br>
}<br>
},<br>
push : function(o){<br>
SavedObject.elements[SavedObject.elements.length]=o;<br>
}<br>
}<br>
</script><br>
</head>
<br>
<body onLoad="CoolDrag.init('container');"><br>
<br /><br>
<div id="container"><br>
<div id="leftcontainer"><br>
<div style="height:100px; width:200px; " class="dragLayer" id="win1"><br>
<div class="dragHeader"><br>
<div style="float:left">第一个窗口</div><br>
<div style="float:right; "><span class="min">0</span><span
/>class="close">r</span></div><br>
</div><br>
<div class="content">window 1</div><br>
</div><br>
<div style="height:100px; width:200px; " class="dragLayer" id="win2"><br>
<div class="dragHeader"><br>
<div style="float:left">第二个窗口</div><br>
<div style="float:right; "><span class="min">0</span><span
/>class="close">r</span></div><br>
</div><br>
<div class="content">window 2</div><br>
</div><br>
</div><br>
<div id="middlecontainer"><br>
<div style="height:100px; width:200px; " class="dragLayer" id="win3"><br>
<div class="dragHeader"><br>
<div style="float:left">第三个窗口</div><br>
<div style="float:right; "><span class="min">0</span><span
/>class="close">r</span></div><br>
</div><br>
<div class="content">window 3</div><br>
</div><br>
<div style="height:100px; width:200px; " class="dragLayer" id="win4"><br>
<div class="dragHeader"><br>
<div style="float:left">第四个窗口</div><br>
<div style="float:right; "><span class="min">0</span><span
/>class="close">r</span></div><br>
</div><br>
<div class="content">window 4</div><br>
</div><br>
</div><br>
<div id="rightcontainer"><br>
<div style="height:100px; width:200px; " class="dragLayer" id="win5"><br>
<div class="dragHeader"><br>
<div style="float:left">第五个窗口</div><br>
<div style="float:right; "><span class="min">0</span><span
/>class="close">r</span></div><br>
</div><br>
<div class="content">window 5</div><br>
</div><br>
<div style="height:100px; width:200px; " class="dragLayer" id="win6"><br>
<div class="dragHeader"><br>
<div style="float:left">第六个窗口</div><br>
<div style="float:right; "><span class="min">0</span><span
/>class="close">r</span></div><br>
</div><br>
<div class="content">window 6</div><br>
</div><br>
<div style="height:100px; width:200px; " class="dragLayer" id="win7"><br>
<div class="dragHeader"><br>