DIV隨鼠標拖動效果

直接貼代碼:

<html>
<head>
<title>_xWin</title>
<script language=JScript>
<!--
//可以打包爲js文件;
var x0=0,y0=0,x1=0,y1=0;
var offx=6,offy=6;
var moveable=false;
var hover='orange',normal='slategray';//color;
var index=10000;//z-index;
var xx;
//開始拖動;
function startDrag(obj)
{
         if(event.button==1)
         {
                 //鎖定標題欄;
                 obj.setCapture();
                 //定義對象;
                 var win = obj.parentNode;
                 var sha = win.nextSibling;
                 //記錄鼠標和層位置;
                 x0 = event.clientX;
                 y0 = event.clientY;
                 x1 = parseInt(win.style.left);
                 y1 = parseInt(win.style.top);
                 //記錄顏色;
                 normal = obj.style.backgroundColor;
                 //改變風格;
                 obj.style.backgroundColor = hover;
                 win.style.borderColor = hover;
                 obj.nextSibling.style.color = hover;
                 sha.style.left = x1 + offx;
                 sha.style.top   = y1 + offy;
                 moveable = true;
         }
}
//拖動;
function drag(obj)
{
         if(moveable)
         {
                 var win = obj.parentNode;
                 var sha = win.nextSibling;
                 win.style.left = x1 + event.clientX - x0;
                                 sha.style.left = parseInt(win.style.left) + offx;
                                 if ((y1 + event.clientY - y0)>0 && (y1 + event.clientY - y0)<600){
                 win.style.top   = y1 + event.clientY - y0;
                 sha.style.top   = parseInt(win.style.top) + offy;
                 }
         }
}
//停止拖動;
function stopDrag(obj)
{
         if(moveable)
         {
                 var win = obj.parentNode;
                 var sha = win.nextSibling;
                 var msg = obj.nextSibling;
                 win.style.borderColor      = normal;
                 obj.style.backgroundColor = normal;
                 msg.style.color            = normal;
                 sha.style.left = obj.parentNode.style.left;
                 sha.style.top   = obj.parentNode.style.top;
                 obj.releaseCapture();
                 moveable = false;
         }
}
//獲得焦點;
function getFocus(obj)
{
         if(obj.style.zIndex!=index)
         {
                 index = index + 2;
                 var idx = index;
                 obj.style.zIndex=idx;
                 obj.nextSibling.style.zIndex=idx-1;
         }
}
//最小化;
function min(obj)
{
         var win = obj.parentNode.parentNode;
         var sha = win.nextSibling;
         var tit = obj.parentNode;
         var msg = tit.nextSibling;
         var flg = msg.style.display=="none";
         if(flg)
         {
                 win.style.height   = parseInt(msg.style.height) + parseInt(tit.style.height) + 2*2;
                 sha.style.height   = win.style.height;
                 msg.style.display = "block";
                 obj.innerHTML = "0";
         }
         else
         {
                 win.style.height   = parseInt(tit.style.height) + 2*2;
                 sha.style.height   = win.style.height;
                 obj.innerHTML = "2";
                 msg.style.display = "none";
         }
}
//關閉;
function cls(obj)
{
         var win = obj.parentNode.parentNode.parentNode;
         //var sha = win.nextSibling;
         win.style.visibility = "hidden";
         //sha.style.visibility = "hidden";
}
//顯示/隱藏;
function ShowHide()
{
         if (xx!=null)
                         if (xx.style.visibility == "hidden")
                                 xx.style.visibility = "visible";
                         else if (xx.style.visibility == "visible")
                                 xx.style.visibility = "hidden";
}
//創建一個對象;
function xWin(id,w,h,l,t,tit,msg)
{
         index = index+2;
         this.id       = id;
         this.width    = w;
         this.height   = h;
         this.left     = l;
         this.top      = t;
         this.zIndex   = index;
         this.title    = tit;
         this.message = msg;
         this.obj      = null;
         this.bulid    = bulid;
         this.bulid();
         xx = document.getElementById('allx');
         xx.style.visibility = "visible";
}
//初始化;
function bulid()
{
         var str = ""
                 + "<div id='allx'><div id='xMsg'" + this.id + " "
                 + "style='"
                 + "z-index:" + this.zIndex + ";"
                 + "width:" + this.width + ";"
                 + "height:" + this.height + ";"
                 + "left:" + this.left + ";"
                 + "top:" + this.top + ";"
                 + "background-color:" + normal + ";"
                 + "color:" + normal + ";"
                 + "font-size:11px;"
                 + "font-family:Verdana;"
                 + "position:absolute;"
                 + "cursor:default;"
                 + "border:2px solid " + normal + ";"
                 + "' "
                 + "onmousedown='getFocus(this)'>"
                         + "<div "
                         + "style='"
                         + "background-color:" + normal + ";"
                         + "width:" + (this.width-2*2) + ";"
                         + "height:20;"
                         + "color:white;"
                         + "' "
                         + "onmousedown='startDrag(this)' "
                         + "onmouseup='stopDrag(this)' "
                         + "onmousemove='drag(this)' "
                         + "ondblclick='min(this.childNodes[1])'"
                         + ">"
                                 + "<span style='width:" + (this.width-2*14-4) + ";padding-left:3px;'>" + this.title + "</span>"
                                 + "<span style='width:14;border-width:0px;color:white;font-family:webdings;' onclick='min(this)'>0</span>"
                                 + "<span style='width:14;border-width:0px;color:white;font-family:webdings;' onclick='cls(this)'>r</span>"
                         + "</div>"
                                 + "<div style='"
                                 + "width:100%;"
                                 + "height:" + (this.height-20-4) + ";"
                                 + "background-color:white;"
                                 + "line-height:14px;"
                                 + "word-break:break-all;"
                                 + "padding:3px;"
                                 + "'>" + this.message + "</div>"
                 + "</div>"
                 + "<div id='xshadow' style='"
                 + "width:" + this.width + ";"
                 + "height:" + this.height + ";"
                 + "top:" + this.top + ";"
                 + "left:" + this.left + ";"
                 + "z-index:" + (this.zIndex-1) + ";"
                 + "position:absolute;"
                 + "background-color:black;"
                 + "filter:alpha(opacity=40);"
                 + "'>by wildwind</div></div>";
         document.getElementById('msgbox').innerHTML = str;
                
                
}
//-->
</script>
<script language='JScript'>
<!--
function initialize()
{
         var a = new xWin("1",460,400,200,200,"是要這個效果嗎?","<br>這裏有幾點需要注意的地方:<br><br>1、xx這個變量是你自己添加的吧?想法是對的,但是放錯了地方,你只在cls()這個方法裏面給xx賦值,這就造成了這個對象在窗口第一次出現時由於沒有被賦值(關閉按鈕還沒有被點擊),導致無法獲取,所以應該把對xx賦值這個工作放在窗口第一次初始化完成的地方,也就是xWin函數中,this.build語句之後。當然也可能你已經試過放在這裏,但是發現根本不起作用,這就涉及到下一個要注意的問題了。<br><br>2、Build函數的最後,你是通過insertAdjacentHTML()方法把生成的代碼放在了網頁全部html標籤之後,因此生成的代碼中的對象在頁面中使用getElementById()方法根本訪問不到,所以纔會不起作用,怎麼改呢?方法很多,我是這樣處理的,在頁面body的關閉標籤之前插入一個div,然後用innerHTML()方法寫入。<br><br>3、對於代碼,我進行了一點修正,因爲發現你的cls()方法當中把xWin和他的陰影一併隱藏了,但是在ShowHide()方法中卻只把xWin顯示出來,這就導致關閉(實質上是hidden)後再打開的窗體已經沒有了陰影,當然這也不算什麼大問題,我在xWin和他的陰影外面套了一個allx的div,再把這個對象賦給xx,然後就可以一併隱藏一併顯示了,更方便一些。<br><br>4、主要就是這幾個地方,這個效果還是很不錯的,不過程序結構還可以再優化一些,代碼比較多,我也沒有細看,稍微改了一下,可能不是最好的方法。大家繼續提建議啊。希望對樓主能有幫助。");
}
window.onload = initialize;
//-->
</script>
</head>
<body onselectstart='return false' oncontextmenu='return false' scroll='no'>

<DIV class=textSheet 
style="BORDER-RIGHT: #3E8529 1px solid; BORDER-TOP: #639517 1px solid; BORDER-LEFT: #3E8529 1px solid; BORDER-BOTTOM: #3E8529 1px solid">
<table width="242" height="160" border="1" ID="Table2">
     <td align="center" valign="middle" style="cursor:hand;font-size:32px;color: #808080"   onMouseMove="bgColor='#ffff99'" onmouseout="bgColor='#FFFFFF'" onclick="ShowHide()">顯示隱藏</td> 
</table>
</DIV>
<div id="msgbox"></div>
</body>
</html>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章