⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 19-1 模拟窗口效果 all in one file.htm

📁 JAVASCRIPT完全自学手册,中源码的验证修订实例
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!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 + -