📄 19-1 模拟窗口效果 all in one file.htm
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312" />
<title>19-1 模拟窗口效果</title>
<style type="text/css">
* { font-size:12px; font-family:宋体, Arial; } /*规定了所有的字体样式*/
body { width:100%; height:100%; margin:0px; padding:0px; overflow:auto; }
.xWin { position:absolute; cursor:default; border-width:2px; border-style:outset; padding:0px; font-size:12px; overflow:hidden; display:block; }
.xWin .xWinSetting { display:none; }
.xWin .xTitle { color:#FFFFFF; height:20px; display:block; }
.xWin .xTitle input {
background-color:transparent;
color:#FFFFFF;
border-width:0px;
border-style:solid;
height:20px;
width:16px;
line-height:20px;
font-family:webdings;
font-size:10px;
margin:0px;
padding:0px;
text-align:center;
float:right;
display:block;
}
.xWin .xTitle .xWinTitleContent {
color:#FFFFFF;
font-size:12px;
height:18px;
line-height:20px;
margin:0px;
padding-left:3px;
float:left;
display:block;
overflow:hidden;
white-space:nowrap;
text-align:left;
cursor:default;
}
.xWin .xWinBody {
margin:0px;
background-color:#FFFFFF;
color:#000000;
padding:3px;
font-size:12px;
overflow:auto;
position:relative;
display:block;
}
.xShadow {
position:absolute;
display:block;
background-Color:#000000;
color:#FFFFFF;
}
</style>
<script type="text/javascript">
//<![CDATA[
// 模拟子窗口效果
/*
说明:
x系列是Hutia开发的系列JS代码,配合相应的css后可以实现快速的自定义标签
目前x系列支持的浏览器类型为:IE5.5, FF1.5
xWin的标签为 <div class="xwin">content</div>
支持属性:
int left, int top, int width, int height
支持方法:
Close(), Destroy(), Max([bolean Variable]), Min([bolean Variable]),
MoveTo(int x, int y), ResizeTo(int x, int y), SetContent(string Variable | htmlObject Variable)
SetTitle(string Variable), ShowHide()
*/
//**检测浏览器种类*****
var BROWSERNAME="";
switch(navigator.appName.toLowerCase()){
case "netscape":
BROWSERNAME="ns";
break;
case "microsoft internet explorer":
default:
BROWSERNAME="ie";
break;
}
//**设置初始化变量******
switch(BROWSERNAME){
case "ns":
window.addEventListener("load",_xWin_init,false);
break;
case "ie":
default:
window.attachEvent("onload",_xWin_init);
}
//**设置全局定时器******
if(typeof(__xSeriaTimer__)=="undefined"){
var __xSeriaTimer__={
events:new Array(),
objs:new Array(),
handle:null,
exec:function(){
for(var i=0;i<__xSeriaTimer__.events.length;i++){
try{
with(__xSeriaTimer__.objs[i]){
eval(__xSeriaTimer__.events[i]);
}
}catch(e){}
}
},
pop:function(i){
__xSeriaTimer__.events[i]=null;
__xSeriaTimer__.objs[i]=null;
},
push:function(strV,obj){
for(var i=0;i<__xSeriaTimer__.events.length;i++){
if(__xSeriaTimer__.events[i]==null){
__xSeriaTimer__.events[i]=strV;
__xSeriaTimer__.objs[i]=obj;
return(i);
}
}
__xSeriaTimer__.events[i]=strV;
__xSeriaTimer__.objs[i]=obj;
return(i);
},
start:function(){
__xSeriaTimer__.stop();
__xSeriaTimer__.handle=setInterval(__xSeriaTimer__.exec,30);
},
stop:function(){
clearInterval(__xSeriaTimer__.handle);
}
};
__xSeriaTimer__.start();
}
//**初始化函数******
function _xWin_init(){
var allTheWindows=document.getElementsByTagName("div");
for(var i=0;i<allTheWindows.length;i++){
if(allTheWindows[i].className=="xWin")_xWin_event_doInit(allTheWindows[i]);
}
}
//**事件响应函数区******
function _xWin_event_doInit(element){
//初始化变量
element.ownerDocument.index=isNaN(element.ownerDocument.index)?10000:parseInt(element.ownerDocument.index)+1;
element.x0=0;element.y0=0;
element.x1=0;element.y1=0;
element.w0=0;element.h0=0;
element.offx=6;element.offy=6;
element.padx=0;element.pady=0;
element.minW=90;element.minH=(BROWSERNAME=="ns"?20:20);
element.moveable=false;
element.resizable=false;
element.hover='orange';element.normal='#336699';
element.minButton=BROWSERNAME=="ie"?"0":"_";
element.maxButton=BROWSERNAME=="ie"?"1":"=";
element.normalButton=BROWSERNAME=="ie"?"2":"+";
element.closeButton=BROWSERNAME=="ie"?"r":"X";
element._title="Untitled Window";
element._body="";
element._winRect={l:0,t:0,w:0,h:0};
element._restoredWinRect={l:0,t:0,w:0,h:0};
element._windowState="normal";
element.settingNode=getElementByClassName(element,"xWinSetting");
if(!element.settingNode){
element.settingNode=document.createElement("div");
element.settingNode.className="xWinSetting";
element.settingNode.xwin=element;
element.appendChild(element.settingNode);
}
element.xwin=element;
//设置方法
element.Close=_xWin_method_Close;
element.Destroy=_xWin_method_Destroy;
element.GetSetting=_xWin_method_GetSetting;
element.Max=_xWin_method_Max;
element.Min=_xWin_method_Min;
element.MoveTo=_xWin_method_MoveTo;
element.ResizeTo=_xWin_method_ResizeTo;
element.SetContent=_xWin_method_SetContent;
element.SetTitle=_xWin_method_SetTitle;
element.ShowHide=_xWin_method_ShowHide;
//设置事件
element.onmousedown=_xWin_event_doMDown;
element.onmouseup=element.onlosecapture=_xWin_event_doMUp;
element.onmousemove=_xWin_event_doMMove;
element.onclick=_xWin_event_doClick;
element.onselectstart=element.onselect=_xWin_event_doSelect;
//记录显示风格
var tempDisplay=element.style.display;
//改变显示风格
element.style.display="block";
//设置窗口变量
var w=parseInt(element.GetSetting("width"));
w=isNaN(w)?(element.offsetWidth+10):parseInt(w);
w=w<element.minW?element.minW:w;
var h=parseInt(element.GetSetting("height"));
h=isNaN(h)?(element.offsetHeight+30):parseInt(h);
h=h<element.minH?element.minH:h;
var l=parseInt(element.GetSetting("left"));
l=isNaN(l)?element.offsetLeft:parseInt(l);
l=l<1?1:l;
var t=parseInt(element.GetSetting("top"));
t=isNaN(t)?element.offsetTop:parseInt(t);
t=t<1?1:t;
var z=element.ownerDocument.index;
var title=new String(element.GetSetting("title"));
//设置窗口标题
element.oTitle=element.ownerDocument.createElement("div");
element.oTitle.xwin=element;
element.oTitle.className="xTitle";
element.appendChild(element.oTitle);
//设置窗口标题内容
element.oTitleContent=element.ownerDocument.createElement("span");
element.oTitleContent.xwin=element;
element.oTitleContent.className="xWinTitleContent";
element.oTitle.appendChild(element.oTitleContent);
element.oTitleContent.ondblclick=function(){this.xwin.Max();};
element.SetTitle(title);
//设置窗口标题关闭按钮
element.oTitleCButton=element.ownerDocument.createElement("input");
element.oTitleCButton.xwin=element;
element.oTitleCButton.type="button";
element.oTitleCButton.className="xWinTitleCloseButton";
element.oTitle.appendChild(element.oTitleCButton);
element.oTitleCButton.onclick=function(){this.xwin.ShowHide("none");};
element.oTitleCButton.value=element.closeButton;
//设置窗口标题最大化按钮
element.oTitleMaButton=element.ownerDocument.createElement("input");
element.oTitleMaButton.xwin=element;
element.oTitleMaButton.type="button";
element.oTitleMaButton.className="xWinTitleMaxButton";
element.oTitle.appendChild(element.oTitleMaButton);
element.oTitleMaButton.onclick=function(){this.xwin.Max();};
element.oTitleMaButton.value=element.maxButton;
//设置窗口标题最小化按钮
element.oTitleMButton=element.ownerDocument.createElement("input");
element.oTitleMButton.xwin=element;
element.oTitleMButton.type="button";
element.oTitleMButton.className="xWinTitleMinButton";
element.oTitle.appendChild(element.oTitleMButton);
element.oTitleMButton.onclick=function(){this.xwin.Min();};
element.oTitleMButton.value=element.minButton;
//设置窗口内容
element.oContent=element.ownerDocument.createElement("div");
element.oContent.xwin=element;
element.oContent.className="xWinBody";
element.appendChild(element.oContent);
oC=element.firstChild;
while(oC){
tC=oC.nextSibling;
if(oC!=element.oTitle&&oC!=element.oContent){
element.oContent.appendChild(oC);
}
oC=tC;
}
//设置窗口阴影
element.oShadow=element.ownerDocument.createElement("div");
element.oShadow.xwin=element;
element.oShadow.className="xShadow";
element.parentNode.insertBefore(element.oShadow,element.nextSibling);
element.oShadow.style.zIndex=z-1;
element.MoveTo(l,t);
element.ResizeTo(w,h);
//恢复显示风格
element.style.display=tempDisplay;
//设置窗口样式
with(element.style){
zIndex=z;
backgroundColor=element.normal;
color=element.normal;
}
padx=element.offsetWidth-element.clientWidth;
pady=element.offsetHeight-element.clientHeight;
}
function _xWin_event_doMDown(evt){
var e=evt?evt:window.event;
var eSrc=e.srcElement?e.srcElement:e.target;
var leftButton=e.srcElement?e.button==1:e.button==0;
if(this.style.zIndex!=this.ownerDocument.index){//将窗口放到最前
this.ownerDocument.index+=2;
var idx = this.ownerDocument.index;
this.style.zIndex=idx;
this.nextSibling.style.zIndex=idx-1;
}
if(eSrc==this.oTitleContent&&leftButton&&this._windowState=="normal"){//如果开始拖动
//锁定标题栏;
document.captureEvents?document.captureEvents("mousemove",this.oTitle):this.oTitle.setCapture();
//定义对象;
var win = this;
var sha = win.nextSibling;
//记录鼠标和层位置;
this.x0 = e.clientX;
this.y0 = e.clientY;
this.x1 = parseInt(win.style.left);
this.y1 = parseInt(win.style.top);
//改变风格;
this.oTitle.style.backgroundColor = this.hover;
win.style.borderColor = this.hover;
this.oTitle.nextSibling.style.color = this.hover;
sha.style.left = this.x1 + this.offx;
sha.style.top = this.y1 + this.offy;
this.moveable = true;
return(true);
}
if(this.style.cursor!="default"&&this._windowState=="normal"){//开始改变大小
//锁定标题栏;
document.captureEvents?document.captureEvents("mousemove",this.oTitle):this.oTitle.setCapture();
//定义对象;
var win = this;
var sha = win.nextSibling;
//记录鼠标位置和层位置和大小;
this.x0=e.clientX;
this.y0=e.clientY;
this.x1=parseInt(win.offsetLeft);
this.y1=parseInt(win.offsetTop);
this.w0=parseInt(win.offsetWidth);
this.h0=parseInt(win.offsetHeight);
//改变风格;
this.oTitle.style.backgroundColor = this.hover;
win.style.borderColor = this.hover;
this.oTitle.nextSibling.style.color = this.hover;
sha.style.left = this.x1 + this.offx;
sha.style.top = this.y1 + this.offy;
this.resizable = true;
return(true);
}
}
function _xWin_event_doMUp(evt){
var e=evt?evt:window.event;
document.releaseEvents?document.releaseEvents("mousemove",this.oTitle):this.oTitle.releaseCapture();
if(this.moveable){
var win = this;
var sha = win.nextSibling;
var msg = this.oTitle.nextSibling;
win.style.borderColor = "";
this.oTitle.style.backgroundColor = "";
msg.style.color = "";
sha.style.left = this.oTitle.parentNode.style.left;
sha.style.top = this.oTitle.parentNode.style.top;
this.moveable = false;
return(false);
}
if(this.resizable){
var win = this;
var sha = win.nextSibling;
var msg = this.oTitle.nextSibling;
win.style.borderColor = "";
this.oTitle.style.backgroundColor = "";
msg.style.color = "";
sha.style.left = this.oTitle.parentNode.style.left;
sha.style.top = this.oTitle.parentNode.style.top;
sha.style.width = this.oTitle.parentNode.style.width;
sha.style.height = this.oTitle.parentNode.style.height;
this.style.cursor="default";
this.resizable = false;
return(false);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -