您的位置:无忧脚本 » Brull与无忧同在 » 日志
仿真windows窗口类Jwindow
查看( 2044 ) /
评论( 11 )
正考虑做一个web聊天的东东,打算用它做客户端容器
!Jg}&vx4S~+e0部分代码参考DronFw里的代码,大家批批
mW V3^*]+OL(m0只能应用在XHTML下,没有考虑HTML4.0的兼容性,感兴趣的只要稍作修改就能用在HTML4.0下
Q8Y9`Y#\UT f0转载的朋友请保留作者信息
!Jg}&vx4S~+e0部分代码参考DronFw里的代码,大家批批
mW V3^*]+OL(m0只能应用在XHTML下,没有考虑HTML4.0的兼容性,感兴趣的只要稍作修改就能用在HTML4.0下
Q8Y9`Y#\UT f0转载的朋友请保留作者信息
CODE:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">无忧脚本2e^Abe
f7g$exq/j4D-S!V
<html xmlns="http://www.w3.org/1999/xhtml">无忧脚本4|9M[yj$W_"i
<head>
L,yX8f1Fg,u,E0<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />无忧脚本9I}"rU9fs
<meta name="author" content="brull@163.com,brull">无忧脚本/\u(XY1P.@Mij*N
<scrīpt type="text/javascrīpt">无忧脚本n%zT0_x6}'S|f+xp6}
/**无忧脚本
md9u5x'u$I i
*JWindow,Jchat窗口类
$AeWD6k4o0*version 1.0无忧脚本(\
P7eD.`-p;H"i
*@author brull
zv
hv8c0*@email brull@163.com无忧脚本HT9~bo_Kb8r6O
*@date 2007-01-31无忧脚本*c
Q f {%P(|w*dX
*/
)R@o]~C8s6i2B0无忧脚本 @O
dT'V9|x
/*无忧脚本o3[z
j+^-g
*新建一个窗口视图,并显示在浏览器容器里
XPv J/J%x0*类里有实例方法,min、changeStatus、close、drag
Z.y7{:x2APu)}0*/无忧脚本7w]
v+eP(NH(N$p5xF
JWindow = function (win_obj)无忧脚本at6H1s lh
{无忧脚本
_ A9{*PdM
/*
nnkc2{$F8}n0 窗口存在判断无忧脚本7jg7[.q%uX zVb-q
如果窗口存在则只是显示它,并将它置为当前窗口无忧脚本 NC/W5K'?^y
*/
*e+Qy_5z/~U-I0 if(document.getElementById(win_obj.id)){//窗口已存在无忧脚本
Ap7N
[~(Wh|
var existWin = document.getElementById(win_obj.id).quote;//存在窗口的引用无忧脚本v)x0MB|
if (JWindow.curWindow != win_obj.id){//窗口不是当前窗口
4h o t[6n
J,N0 if (existWin.contain.style.display == "none"){//窗口是隐藏的(MIN,CLOSE),窗口隐藏时标题活动样式不变无忧脚本"\}V,G5Qsi
existWin.status = existWin.oldStatus;//还原原来状态无忧脚本gL;C R Ap6C"ZOf'j"[
existWin.contain.style.display = "";//显示窗口无忧脚本
])k"X'okV
JWindow.curWindow = win_obj.id;//设置为当前窗口无忧脚本+n@b,kP:J
me.previous = JWindow.curWindow;
(~bSE9MF?0 }
9gHV
m%a)Q*h0 else {无忧脚本}%AFAS
document.getElementById(JWindow.curWindow + "_caption").className = "win_caption_deactive";//设置当前窗口为非活动窗口样式无忧脚本^?-zR'qQv"K
document.getElementById(JWindow.curWindow + "_task").className = "task_button_deactive";//设置任务栏按钮为非活动按钮样式
0Lhek ws)Z0~
s0 JWindow.curWindow = win_obj.id;//设置为当前窗口
1eXV7c]U0 document.getElementById(win_obj.id + "_caption").className = "win_caption_active";//设置窗口为活动窗口样式
$qu$YO N9C.p0 document.getElementById(win_obj.id + "_task").className = "task_button_active";//设置任务栏按钮为活动按钮样式
]l)c^6L0 }
0R }eB;z1ps6rb0 existWin.contain.zIndex = JWindow.zIndex++;//窗口上移到层最顶端无忧脚本!L7jAU:c3N:xa
}无忧脚本{@%R3{2E'w
return;
.k:CJ,[{2CR9S-b{3j0 }
(HG+_ eG*QVTn+i0无忧脚本wx/X5}5kvaK
/**********创建窗口******************/无忧脚本%F&KD-hu1I[X*h
var win = win_obj;//包含窗口属性的原生对象
$zw9rn)H*LoZ0 var isIe = /msie/i.test(navigator.userAgent);//是否是IE浏览器无忧脚本U#R'f9](X&t1h
this.contain = document.createElement("div");//窗口容器无忧脚本.J(@h(c bX,_0v*i
this.id= win.id;//win_obj没有默认值,初始化时win_obj必须有id属性无忧脚本(U]+Cw*}\iSe/JS;T
this.width = win.width?win.width:420;//窗口宽,默认为420
_S HP_R
Q#f\0 this.height = win.height?win.height:360;//窗口关,默认为360
h3?zU(m!eaC-a0 this.left = win.left?win.left:(document.documentElement.clientWidth-this.width)/2;//窗口左上角距离浏览器左边框距离,默认居中无忧脚本l,[&}$v1W2Xz
this.top = win.top?win.top:(document.documentElement.clientHeight-this.height)/2;//窗口左上角距离浏览器上边框距离,默认居中
/\\sJ{Z0 this.oldLeft = this.left;//记录窗口最大化时窗口左上角距离浏览器左边框距离
7N#Q$C$bv0 this.oldTop = this.top;//记录窗口最大化时窗口左上角距离浏览器顶边框距离无忧脚本#ue*Ac^
this.title = win.title?win.title:" ";//标题,默认为空无忧脚本I]H,l`Yt
this.content = win.content ? win.content : "";//窗口内容,默认为空
'w3r
zO \
E`0 this.icon = win.icon ? win.icon : "http://www.51js.com/attachments/2007/03/35270_200703102258421.gif";//窗口图标
DxK |_0 this.minButton = (win.minButton == false) ? false:true;//是否显示最小化按钮,默认显示无忧脚本ipoV
|$S;y
\'M"Om
this.maxButton = (win.maxButton == false) ? false:true;//是否显示最大化按钮,默认显示无忧脚本B4a:Y*cyGZ)u#u h*_?
this.closeButton = (win.closeButton==false) ? false:true;//是否显示关闭按钮,默认显示无忧脚本]`(}o}
this.status = "NORMAL";//窗口状态,包括MAX,MIN,NORMAL,CLOSE
a
Ck$UA+^ mrxor"R0 this.previous = JWindow.curWindow ? JWindow.curWindow : null;//上个当前窗口,在窗口关闭和最小化时有用
#sE[$[@3_3]0 win = null;//释放对象
J4V1G E@0 var me = this;//对象引用,方便类内部引用
v#yinz6i,i&y0
-\j] ~1C]X)[0 /*************生成窗口视图******************/
I6B"dV#KE;l#v0 me.contain.id = this.id;无忧脚本5tpiR8eYM6w"D
me.contain.quote = this;//对象引用,方便应用页面引用
$E+Y(q
b[0ww[
c%M.~*? |0 me.contain.className="win_contain";
*A
bv!j$ehy0 with(me.contain.style){
Q/@"P i@8C"j0 position = "absolute";
^nu,e4op(??0 left = this.left + "px";
*aUG4Ud(q`-~G_0 top = this.top + "px";
|;x8?7k E0 width =this.width + "px";
(qn3|zEG:L8|0 height =this.height + "px";
hPmJ(uJctrqu0 zIndex = JWindow.zIndex++;无忧脚本)Q{/G+kc-AH
}
;u/Ru'D5p&jo'MIB0 me.contain.innerHTML = "\无忧脚本&A7qp(P'@Z_
<div class=\"win_caption_active\" id=\"" + this.id + "_caption\"" + " ōndblclick=\"document.getElementById('" + this.id + "').quote.changeStatus('" + this.id + "')\">\无忧脚本 B.D2T%WEMQ
<img src=\"" + this.icon + "\" class=\"win_icon\" /><span class=\"win_title\">" + this.title + "</span>\无忧脚本4Pi)_M;A"rb
<div class=\"win_button_div\">"无忧脚本$X%kQt8X-ht
+(this.minButton ? "<input class=\"win_min\" type=\"button\" title=\"最小化\" ōnclick=\"document.getElementById('" + this.id + "').quote.min();\" />":"")无忧脚本2L4x,Q'Nb-|%h9|L
+(this.maxButton ? "<input class=\"win_max\" id=\"" + this.id + "_maxbutton\" type=\"button\" ōnmouseover=\"this.title=(document.getElementById('" + this.id + "').quote.status=='MAX')?'还原':'最大化'\" ōnclick=\"this.blur();document.getElementById('" + this.id + "').quote.changeStatus();\" />":"")
H p1Ohy0 +(this.closeButton ? "<input class=\"win_close\" type=\"button\" title=\"关闭\" ōnclick=\"document.getElementById(\'" + this.id + "\').quote.close();\"/>":"")
wp$v Tp0 + "</div>\
;r"yZ*}3kTs&t0 </div>\
A
w2Gj;~2uc
i5CI0 <div class=\"win_body\" id=\"" + this.id + "_body" + "\">" + this.content + "</div>\无忧脚本[$C-v-_:s0nv
";
uT2z$B#^-EGN_;{+J0无忧脚本6xD2Jnl:{_
/***************注册窗口事件************************/无忧脚本*~[}j)]3[LV?[1g
me.contain.onmousedown = function (e)无忧脚本%f%afRw7w
{
xu[h,x0 e = e || window.event;
!]&y"KH0gaC:j*E0 var srcElement = isIe ? e.srcElement : e.target;
I7@K|3K;k2Xj0 if(JWindow.curWindow != me.id){
*l0c G;`yCxE
al)qd0 me.contain.style.zIndex = JWindow.zIndex++;无忧脚本}*T!}b L(D/U'c
X
document.getElementById(JWindow.curWindow + "_caption").className = "win_caption_deactive";无忧脚本Yk`-BJ;m
document.getElementById(JWindow.curWindow + "_task").className = "task_button_deactive";
jb,x2s&l0 me.previous = JWindow.curWindow;
/F3O|
I;KTEQ0 JWindow.curWindow = me.id;//设置为当前窗口
5yv:lN+k9h&_l_0 document.getElementById(JWindow.curWindow + "_caption").className = "win_caption_active";无忧脚本{aV}#K:W"g
document.getElementById(JWindow.curWindow + "_task").className = "task_button_active";
tDM$Lwb0 }无忧脚本aA
[J+le*@
if (me.id + "_caption" ==srcElement.id && me.status == "NORMAL") me.drag(e);
1tZ._YPynB/Q0 }
