直接貼代碼:
<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>