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

📄 laputaxwinmain.js

📁 用AJAX制作的一个超强桌面
💻 JS
字号:
/*
  xWindows for Laputa System
  auther: Jangogo Chan Q108112937
  copyright: 4Fang Technology 广州海然数码科技有限公司
  date created : 2006-12-08
*/

var xWinBorderCssText=document.styleSheets('xwincss').rules(0).style.cssText;

document.onmousemove = mouseMove;
document.onmouseup   = mouseUp;
var dragObject  = null;
var mouseOffset = null;
var subfixName  = "_TK";
function mouseCoords(ev){
	if(ev.pageX || ev.pageY){
		return {x:ev.pageX, y:ev.pageY};
	}
	return {
		x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
		y:ev.clientY + document.body.scrollTop  - document.body.clientTop
	};
}

function getMouseOffset(target, ev){
	ev = ev || window.event;

	var docPos    = getPosition(target);
	var mousePos  = mouseCoords(ev);
	return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
}
function getPosition(e){
	var left = 0;
	var top  = 0;

	while (e.offsetParent){
		left += e.offsetLeft;
		top  += e.offsetTop;
		e     = e.offsetParent;
	}

	left += e.offsetLeft;
	top  += e.offsetTop;

	return {x:left, y:top};
}

function mouseMove(ev){
	ev           = ev || window.event;
	var mousePos = mouseCoords(ev);
    
	if(dragObject){
		dragObject.style.position = 'absolute';
	    try{
		  dragObject.style.top      = mousePos.y - mouseOffset.y;
		  dragObject.style.left     = mousePos.x - mouseOffset.x;
		}catch(ex){
		  mouseOffset=getMouseOffset(dragObject,ev);
		}
        if(dragObject.id=="ResizerDiv"){
          $("ResizerFrm").style.top=dragObject.style.top;
          $("ResizerFrm").style.left=dragObject.style.left;
          $("WinShape").style.width=dragObject.offsetLeft - $(WinArea.TopWinName).offsetLeft + 8  + "px";
          $("WinShape").style.height=dragObject.offsetTop - $(WinArea.TopWinName).offsetTop + 8 + "px";
        }
		return false;
	}
}
function mouseUp(){
   mouseOffset=null;
   if(dragObject!=null){
     var id=dragObject.id;
	 dragObject = null;
	 $("MaskDivT").style.display="none";
	 $("MaskDivB").style.display="none";
	 $("WinShape").style.display="none";
	 if($(WinArea.TopWinName)){
	   if(id=="WinShape"){
	     $(WinArea.TopWinName).style.left= $("WinShape").style.left;
         $(WinArea.TopWinName).style.top= $("WinShape").style.top;
	   }else{ 
         $(WinArea.TopWinName).style.width= $("WinShape").style.width;
         $(WinArea.TopWinName).style.height= $("WinShape").style.height;
       }
       frontXwin(WinArea.TopWinName);
     }
   }  
}

function makeDraggable(item){
	if(!item) return;
	item.onmousedown = function(ev){
	    showShape();
		dragObject  = this;
		mouseOffset = getMouseOffset(this, ev);
		return false;
   }
}

function showShape(){
        $("MaskDivT").style.display="";
	    $("MaskDivB").style.display="";
	    var zx=$(WinArea.TopWinName).style.zIndex;
	    $("MaskDivB").style.zIndex=zx+1;
	    $("MaskDivT").style.zIndex=zx+2;
	    
	    $("ResizerFrm").style.zIndex=zx+3;
	    $("ResizerDiv").style.zIndex=zx+4;
	    
	    $("WinShape").style.display="";
	    $("WinShape").style.zIndex=zx+5;
	    $("WinShape").style.top=$(WinArea.TopWinName).style.top;
	    $("WinShape").style.left=$(WinArea.TopWinName).style.left;
	    $("WinShape").style.width=$(WinArea.TopWinName).style.width;
	    $("WinShape").style.height=$(WinArea.TopWinName).style.height;
}

function hideShape(){
  $("MaskDivT").style.display="none";
  $("MaskDivB").style.display="none";
  $("WinShape").style.display="none";

}
/*===end Drag and Drop======*/

var zInxWin=100;
var zInxTop=zInxWin+10;

var Wins=0;

window.onresize=repos;

function repos(){
  $("TaskBarDiv").style.height= WinArea.TaskbarHeight+"px";
  $("TaskBarDiv").style.top=WinArea.getHeight()+"px";
  $("TaskBarDiv").style.zIndex=zInxTop+1;
}

WinArea={

  TaskbarHeight:20,
  WinOffset:20,
  getWidth: function(){return document.body.clientWidth-4;},
  getHeight:function(){return document.body.clientHeight-WinArea.TaskbarHeight;},
  TopWinName:null,
  lastX:0,
  lastY:0  
};

var WinInx = 0;
function getUniqueWinID(){
  WinInx ++ ;
  return "xChildWin_" + WinInx ;
}


function openXwin(sURL,width,height,modal,fixed,sName){
  if(sName == ""||!sName||modal){
     sName=getUniqueWinID();  
  }
  if($("ModalMaskFrm").style.display!="none")modal=true;
  var wmax=WinArea.getWidth();
  var hmax=WinArea.getHeight();
  var w=wmax;
  var h=hmax;
  var t=0;
  var l=0;
  var nh;
  var nw;

  if(width){
      w=width;
      //nw=w;
    if(WinArea.lastX==0||modal)   
       l=parseInt(wmax-w)/2;
    else   
      l=WinArea.lastX-WinArea.WinOffset;   

  }else{
     nw=parseInt(wmax/2);
  }    
  if(height){
     h=height;
     if(WinArea.lastY==0||modal)
        t=parseInt(hmax-h)/2;
     else
        t=WinArea.lastY-WinArea.WinOffset;   
  }else{
    nh=parseInt(hmax/2);
  }

  if(t<0)t=0;
  if(l<0)l=0;
  
  if(!modal){   
   WinArea.lastX=l;
   WinArea.lastY=t;
  }
  if(!$(sName)){
    var css='position:absolute;left:'+l+'px;top:'+t+'px;width:'+ w +'px;height:'+h+'px;z-index:'+zInxTop +';'+xWinBorderCssText;
    if(document.all)
      var ifrm=document.createElement('<iframe name="'+sName+'" style="'+css+'"></iframe>');
    else{
      var ifrm=document.createElement('iframe');
      ifrm.name=sName;
      ifrm.style.cssText=css;
    }
    document.body.appendChild(ifrm);
    
    var dv=document.createElement("div");
    dv.id=sName + subfixName;
    dv.className="TaskBarBtnComment";
    dv.onmouseover=mouseoverTskBtn;
    dv.onmouseout=mouseoutTskBtn
    dv.innerHTML=dv.id;
    dv.setAttribute("winName",sName);
    dv.setAttribute("initHeight",h);
    dv.setAttribute("initWidth",w);
    
    if(nh!=null && nw!=null){
      dv.setAttribute("nowHeight",nh);
      dv.setAttribute("nowWidth",nw);
      dv.setAttribute("nowHeight",nh);
      dv.setAttribute("nowLeft",WinArea.lastX);
      dv.setAttribute("nowTop",WinArea.lastY);
      dv.setAttribute("winMax",1);
    }
    dv.onclick=clickTaskBarBtn;
    if(modal)dv.style.display="none";
    //dv.setAttribute("onclick","frontXwin('"+sName+"');");
    if(modal)
      dv.setAttribute("modal",1);
    if(fixed)
      dv.setAttribute("fixed",1);
          
    $("TaskBarDiv").appendChild(dv);
    //var ps="{winName:'"+sName+"',initHeight:"+h+",initWidth:"+w+",Height}"
    //dv.style.left=Wins*100 + "px";
    //dv.style.top="0px";
    //alert($("TaskBarDiv").innerHTML);
    Wins++; 
  }
  ifrm.src=sURL;
  frontXwin(sName);
  if(Wins==1)frontXwin(sName);
}

function mouseoverTskBtn(ev){
  ev = ev || window.event;
  if(ev.srcElement.className=='TaskBarBtnComment'){
    ev.srcElement.className='TaskBarBtnCommentOver';
  }
}

function mouseoutTskBtn(ev){
  ev = ev || window.event;
  if(ev.srcElement.className=='TaskBarBtnCommentOver'){
    ev.srcElement.className='TaskBarBtnComment';
  }
}

function clickTaskBarBtn(ev){
  if($("ModalMaskFrm").style.display!="none")return;
  ev = ev || window.event;
  var s=ev.srcElement.getAttribute("winName");
  frontXwin(s);
}


function closeXwin(s){
  ////frontXwin(s);
  try{
    hideResizer();
    var dead=$(s);
    dead.display="none";
    dead.src="about:blank";
    document.body.removeChild(dead);
    delete dead;
    dead=$(s+subfixName);
    $("TaskBarDiv").removeChild(dead);
    delete dead;
    Wins--;
  }catch(ex){
  }
  $("ModalMaskFrm").style.display="none";
  try{
    if(Wins>0)
      frontXwin($("TaskBarDiv").childNodes[Wins].getAttribute("winName"));
  }catch(ex){}
}

/*
function clipShape(s,tt,t,l,w,h){
  try{ 
      var e1=$(s+subfixName);
	  var e2=$("WinShape");
	  var p1=getPosition(e1);
	  var p2=getPosition(e2);
	  
      if(String(tt)=="undefined"){
        tt=10;  
	    l=parseInt((p1.x-p2.x)/10);
	    t=parseInt((p1.y-p2.y+e2.offsetHeight)/10);
	    w=parseInt((e2.offsetWidth -e1.offsetWidth) /10);
	    h=parseInt((e2.offsetHeight -e1.offsetHeight) /10);
      }else{  
        tt--;
	  } 
       with($("WinShape").style){
	      left=(p2.x + l) +"px";
	      top=(p2.y + t ) + "px";
	      //window.status=l + "," + t
	      width=$("WinShape").offsetWidth -w +"px";
	      height=$("WinShape").offsetHeight-h +"px";
	    }
	  
  }catch(ex){
  }
  if(tt>1){
    window.setTimeout("clipShape('" + s + "',"+tt+","+t+","+l+","+w+","+h+")",20);
  }else{
    hideShape();
  }
}
*/

function minXwin(s){
  var e=$(s+subfixName);
  if(e){
    if(e.getAttribute("modal")=="1")return;
  }
  frontXwin(s);
  hideResizer();
  //showShape();
  $(s).style.display="none";
  //clipShape(s);
}

function maxXwin(s){
  var e=$(s+subfixName);
  if(e.getAttribute("winMax")=="1"){
    $(s).style.width=e.getAttribute("nowWidth");
    $(s).style.height=e.getAttribute("nowHeight");
    $(s).style.left=e.getAttribute("nowLeft");
    $(s).style.top=e.getAttribute("nowTop");
    e.setAttribute("winMax",0);
    setResizer(s);
  }else{
    e.setAttribute("nowWidth",$(s).style.width);
    e.setAttribute("nowHeight",$(s).style.height);
    e.setAttribute("nowLeft",$(s).style.left);
    e.setAttribute("nowTop",$(s).style.top);
    e.setAttribute("winMax",1);
    $(s).style.left=0;
    $(s).style.top=0;
    $(s).style.width=WinArea.getWidth() + "px";
    $(s).style.height=WinArea.getHeight() + "px"; 
  }
 //  
}


function moveXwin(s,t,l,w,h){
   var w_=$(s).offsetWidth;
   if(typeof(w)=='number'){w_=w}

   var h_=$(s).offsetHeight;
   if(typeof(h)=='number'){h_=h}

   var t_=$(s).offsetTop;
   if(typeof(t)=='number'){
      t_=t;
      if(t==0.5){
        t_=parseInt((WinArea.getHeight()-h_)/2);   
      }
   }

   var l_=$(s).offsetLeft;
   if(typeof(l)=='number'){
      l_=l;
      if(l==0.5){
        l_=parseInt((WinArea.getWidth()-w_)/2);   
      }
   }
   $(s).style.left=l_ + "px";
   $(s).style.top=t_ + "px";
   $(s).style.width=w_ + "px";
   $(s).style.height=h_ + "px"; 
   setResizer(s);
}

function hideResizer(){
  $("ResizerDiv").style.display="none";
  $("ResizerFrm").style.display="none";
}


function setFront(sName){
    var e= $(sName);
    if(e){
       e.style.display="";
       e.style.zIndex=zInxTop;
       e=$(sName+subfixName);
       e.className="TaskBarBtnActive";
       if(e.getAttribute("modal")=="1"){
         $("ModalMaskFrm").style.zIndex=zInxTop-5;
         $("ModalMaskFrm").style.display="";
       }else{
         $("ModalMaskFrm").style.display="none";
       }
       WinArea.TopWinName=sName;
    }   
}

function frontXwin(sName){
  hideStartMenu();

  $("ModuleFrm").style.zIndex=0;
  
   if(WinArea.TopWinName!=sName){
     var e= $(WinArea.TopWinName);
     if(e){
       e.style.zIndex=zInxWin;
       e= $(WinArea.TopWinName+subfixName);
       e.className="TaskBarBtnComment";
     }    
       setFront(sName);
       frontXwin(sName);
   }else{
       setFront(sName);
   }
   
   setResizer(sName);
}

function setResizer(sName){
     

   var e=$(sName+subfixName);
   if(e){
     if(e.getAttribute("fixed")!="1"){
	   e= $(sName);
	   if(e){
	     //e.focus();
	     $("ResizerDiv").style.left=e.offsetWidth + e.offsetLeft - $("ResizerDiv").offsetWidth+2 + "px";
	     $("ResizerDiv").style.top =e.offsetHeight + e.offsetTop - $("ResizerDiv").offsetHeight +2 + "px";
	     $("ResizerDiv").style.zIndex=zInxTop-3;
	     $("ResizerDiv").style.display="";
	     
	     $("ResizerFrm").style.top=$("ResizerDiv").style.top;
	     $("ResizerFrm").style.left=$("ResizerDiv").style.left;
	     $("ResizerFrm").style.zIndex=zInxTop-4;
	     $("ResizerFrm").style.display="";
	   }
     }else{
        $("ResizerFrm").style.display="none";
        $("ResizerDiv").style.display="none";
     }
  }  
}

function setXwinTitle(s,sName){
  $(sName+subfixName).innerHTML=s;
}

function dragShape(){
  //makeDraggable($("WinShape"));
  showShape();
  dragObject=$("WinShape");  
  //$("WinShape").onmousedown(window.event);
}


function initXwin(){

  var dv=document.createElement("div");
  dv.id="ResizerDiv";
  dv.style.cssText=document.styleSheets('xwincss').rules(1).style.cssText;
  document.body.appendChild(dv);
  
  var dv=document.createElement("div");
  dv.id="WinShape";
  dv.style.cssText=document.styleSheets('xwincss').rules(2).style.cssText;
  document.body.appendChild(dv);
  
  
  repos();

  makeDraggable($("ResizerDiv"));
  makeDraggable($("WinShape"));
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -