TabControl.js
上传用户:szraylite
上传日期:2018-06-06
资源大小:11546k
文件大小:11k
源码类别:

软件测试

开发平台:

Java

  1. <!--
  2. document.write('<DIV id="PendingMessage" class="Load">&nbsp;</DIV>');
  3. function document.onreadystatechange()
  4. {
  5. if (document.readyState == "complete") 
  6. {
  7.     HiddenLoading();
  8. }
  9. }
  10. function ShowLoading()
  11. {
  12.     $('PendingMessage').style.display = "block";
  13. }
  14. function HiddenLoading()
  15. {
  16.     $('PendingMessage').style.display = "none";
  17. }
  18. var _stylePath = null//图片所在的路径
  19. var _curentFrame = null;//当前框架的ID
  20. var _curentUrl = null; //当前框架的地址
  21. var _isShowCloseBtn = null;
  22. /*-------------------------------------------------------------------------------
  23. 功能:类似winForm的基于javascript的TabControl效果
  24. 参数:str:消息体
  25. 调用方法
  26. var myTab = new HTabControl(_skinId,true);
  27. document.write(myTab.init());
  28. 不刷新
  29. top.myTab.Cts('标题','default1.aspx')
  30. 刷新
  31. top.myTab.Cts('标题','default1.aspx',true)
  32. -------------------------------------------------------------------------------*/
  33. function HTabControl(tabSkinId,isShowCloseBtn)
  34. {
  35.     //this.tabSkinId = tabSkinId;
  36.     _isShowCloseBtn = isShowCloseBtn;
  37.     _stylePath = _path + "Main/Skin/Tab"+ tabSkinId +"/";
  38.     
  39.     this.init = function()
  40.     {
  41.         loadStyle(this.tabSkinId,"tab.css");
  42.         return "<div id='tabContextMenu' class='ContextMenu' onclick='HiddenDiv(this.id)'>"+
  43.         "<table border='0' cellpadding='0' cellspacing='0'>"+
  44.         "<tr><td class='rightMenuItem1' onclick='window.open(_curentUrl)'>新开</td></tr>"+
  45.         "<tr><td class='rightMenuItem2' onclick='fullOpen(_curentUrl)'>全屏打开</td></tr>"+
  46.         "<tr><td class='rightMenuItem3' onclick=GetIframe('F_'+_curentFrame).document.location.reload();>刷新</td></tr> "+
  47.         "</table>"+
  48.         "</div>"+   
  49.         
  50.         "<table width='100%' height='100%' border='0' cellspacing='0' cellpadding='0'>" +
  51.         "<tr>" +
  52.         "<td style='height:21px' valign='bottom'>" +
  53.         "<table height='100%' id='tabFrameTitle' border='0' cellspacing='0' cellpadding='0'>" +
  54.         "<tr>" +
  55.         "<td valign='bottom'></td>" +
  56.         "</tr>"+
  57.         "</table>" +
  58.         "</td>" +
  59.         "</tr>" +
  60.         "<tr>" +
  61.         "<td class='tabpage' valign='top' id='tdFramePane'></td>" +
  62.         "</tr>" +
  63.         "</table>"; 
  64.     }
  65.     
  66.     //如果不存在页面就创建,如果存在就聚焦
  67.     this.Cts = function(title,url,isRef)
  68.     {
  69.         var objTitle = $("tabFrameTitle");
  70.         var objIframe = $("tdFramePane");
  71.         
  72.         //如果没有该页建立该页 
  73.         if(!$(title))
  74.         {
  75.             ShowLoading();
  76.             CreateTitle(objTitle,title);
  77.             if(isRef == true)
  78.             {
  79.                 CreateIframe(objIframe,title,'auto');
  80.             }
  81.             else
  82.             {
  83.                 CreateIframe(objIframe,title,'auto',url);
  84.             }
  85.             
  86.             if(objTitle.offsetHeight > 25 )
  87.             {
  88.                 alert("您打开了太多的窗口,可能导致页面局部变形。建议关闭一部分窗口");
  89.             }          
  90.         }
  91.         
  92.         
  93.         
  94.         //聚焦到该页
  95.         FoucsPage(title,url,isRef);
  96.         CollectGarbage();//清理浏览器内存 
  97.         _curentUrl = url;
  98.         HiddenDiv('tabContextMenu');
  99.     }
  100. }
  101. function loadStyle(skinId,cssName)
  102. {
  103.     var head = document.getElementsByTagName('head').item(0);
  104.     css = document.createElement('link');
  105.     css.href = _stylePath + cssName;
  106.     css.rel = 'stylesheet';
  107.     css.type = 'text/css';
  108.     css.id = 'loadCss';
  109.     head.appendChild(css);
  110. }
  111. //------------------------------主框架的TabControl效果-------------------------------
  112. //添加标题
  113. function CreateTitle(obj,title)
  114. {
  115.     
  116.     //建立一个一行三列的表格用于tab的标题头
  117.     
  118.     var titleTable = document.createElement("table");
  119.     titleTable.setAttribute("border", "0");
  120.     titleTable.setAttribute("cellPadding","0");
  121.     titleTable.setAttribute("cellSpacing","0");
  122.    
  123.     var titleBody = document.createElement("tbody");
  124.     
  125.     var titleRow = document.createElement("tr");
  126.     
  127.     //建立第一列
  128.     var tdLeft = document.createElement("td");
  129.         tdLeft.className = "tabTitleFoucs_l";
  130.     
  131.     //建立第二列   
  132.     var tdMid = document.createElement("td");//作为标题显示
  133.         tdMid.innerHTML = title;
  134.         tdMid.className = "tabTitleFoucs_m";
  135.         tdMid.title = "双击刷新该页";
  136.         tdMid.onselectstart = function(){return false};
  137.         tdMid.oncontextmenu = function()
  138.         {
  139.            e = window.event || e; e = e.srcElement || e.target;
  140.            if("It_"+_curentFrame != e.parentElement.parentElement.parentElement.id) return false;
  141.            obj = $("tabContextMenu");
  142.            with(obj) 
  143.            {
  144.                 style.pixelLeft=event.x-3;
  145.                 style.pixelTop=event.y-3;
  146.                 style.visibility="visible";
  147.            }
  148.            return false;     
  149.         }
  150.         
  151.     
  152.     //建立第三列   
  153.     var tdClose = document.createElement("td");//作为关闭按纽的容器
  154.         tdClose.className = "tabTitleFoucs_m";
  155.         tdClose.style.width = "11px";
  156.         
  157.         //建立关闭按纽
  158.         if(_isShowCloseBtn)
  159.         {
  160.             CreateCloseBtn(tdClose,title);
  161.         }
  162.     
  163.     //建立第四列  
  164.     var tdRight = document.createElement("td");
  165.         tdRight.className = "tabTitleFoucs_r";
  166.     
  167.     //把列加到行
  168.     titleRow.appendChild(tdLeft);
  169.     titleRow.appendChild(tdMid);
  170.     titleRow.appendChild(tdClose);
  171.     titleRow.appendChild(tdRight);
  172.     
  173.     //把行加到tbody
  174.     titleBody.appendChild(titleRow);
  175.     
  176.     //把tbody加到表格
  177.     titleTable.appendChild(titleBody);
  178.     titleTable.id = "It_"+title;
  179.     titleTable.onclick = function()
  180.     {
  181.         FoucsPage(title);
  182.     };
  183.     titleTable.ondblclick = function()
  184.     {
  185.         GetIframe("F_"+_curentFrame).document.location.reload();
  186.     }
  187.     
  188.     //在主表格上建立一个列
  189.     var mainTd = document.createElement("td");
  190.         mainTd.id = title;
  191.         mainTd.setAttribute("height","21");
  192.         mainTd.appendChild(titleTable); 
  193.         
  194.     
  195.     //把列加到主表格
  196.     obj.rows[0].appendChild(mainTd);
  197.    
  198. }
  199. //创建新的Iframe
  200. function CreateIframe(obj,title,canScoll,url)
  201. {
  202.     var iFrame = document.createElement("iframe");
  203.     iFrame.id = "F_"+title;
  204.     iFrame.name = "F_"+title;
  205.     if(url != null) iFrame.src = url;
  206.     iFrame.frameBorder = "0";
  207.     iFrame.scrolling = canScoll;
  208.     iFrame.className = "Frame";
  209.     iFrame.style.width = "100%";
  210.     iFrame.style.height = "100%";
  211.     iFrame.onreadystatechange = function()
  212.     {
  213.         if (iFrame.document.readyState == "complete") 
  214.         {
  215.             HiddenLoading();
  216.         }
  217.     }
  218.     obj.appendChild(iFrame);
  219.     GetIframe("F_"+title).window.document.onclick = function()
  220.     {
  221.         HiddenDiv('tabContextMenu');
  222.     }
  223. //    GetIframe("F_"+title).window.document.onreadystatechange = function()
  224. //    {
  225. //        if(GetIframe("F_"+title).window.document.readyState == "complete")
  226. //        {
  227. //            HiddenLoading();
  228. //        }
  229. //    }
  230. }
  231. //获取Iframe
  232. function GetIframe(id)
  233. {
  234.     return document.frames[id];
  235. }
  236. //创建关闭按纽
  237. function CreateCloseBtn(parent,id)
  238. {
  239.     var closeBtn = new Image();
  240.     closeBtn.id = "btn"+id;
  241.     closeBtn.src = _stylePath+"tab_close.jpg";
  242.     closeBtn.style.cursor = "pointer";
  243.     closeBtn.onclick = function()
  244.     {
  245.         if(FindOtherFrameId(id) != null)
  246.         {
  247.             FoucsPage(FindOtherFrameId(id));
  248.             CloseTitle(id);
  249.             CloseIframe("F_"+id);
  250.             HiddenLoading();
  251.         }
  252.         else
  253.         {
  254.             alert("必须保留一个标签");
  255.         }
  256.     }
  257.     parent.appendChild(closeBtn);    
  258. }
  259. function CloseCurPage()
  260. {
  261.     $("btn"+_curentFrame).click();
  262.     CollectGarbage();
  263. }
  264. //找“相邻”标题所对应的框架的Id
  265. function FindOtherFrameId(id)
  266. {
  267.     var lastIframeId = null;
  268.     var objTitle = $("tabFrameTitle");
  269.     var cellCount = objTitle.rows[0].cells.length;
  270.     var currentCellIndex = 0;
  271.     for (var i = 0 ; i < cellCount ; ++i)
  272.     {
  273.     if (objTitle.rows[0].cells[i].id == id)
  274.     {
  275.     currentCellIndex = i ;
  276.     }
  277.     }
  278.     if(cellCount == 2)
  279.     {
  280.         return null;
  281.     }
  282.     if(currentCellIndex == 1 &&  currentCellIndex+1 <= cellCount)
  283.     {
  284.         lastIframeId = objTitle.rows[0].cells[currentCellIndex+1].id;
  285.     }
  286.     else
  287.     {
  288.         lastIframeId = objTitle.rows[0].cells[currentCellIndex-1].id;
  289.     }
  290.     if(lastIframeId == "") lastIframeId=null;
  291.     return lastIframeId;
  292. }
  293. //关闭标题
  294. function CloseTitle(id)
  295. {
  296.     if(id != null)
  297.     {
  298.         var objTitle = $("tabFrameTitle");
  299.         for (var i = 0 ; i < objTitle.rows[0].cells.length ; ++i)
  300.         {
  301.         if (objTitle.rows[0].cells[i].id == id)
  302.         {
  303.             if(GetBrowser() == "IE")
  304.             {
  305.             objTitle.rows[0].cells[i].removeNode(true);
  306.         }
  307.         else
  308.         {
  309.             node = objTitle.rows[0].cells[i];
  310.             node.parentNode.removeChild(node); 
  311.         }
  312.         }
  313.         }
  314.     }
  315. }
  316. //关闭框架
  317. function CloseIframe(id)
  318. {
  319.     if(GetBrowser() == "IE")
  320.     {
  321.         var obj = $(id);
  322.         obj.removeNode(true)
  323.     }
  324.     else
  325.     {
  326.         node = $(id);
  327.         node.parentNode.removeChild(node); 
  328.     }
  329. }
  330. //聚焦到对应的标题
  331. function FoucsPage(id,url,isRef)
  332. {
  333.     if(id == null) 
  334.     {
  335.         _curentFrame = null; 
  336.         return;
  337.     }
  338.     if(_curentFrame == id) return;
  339.     _curentFrame = id;
  340.     ShowTitle(id);
  341.     ShowIframe(id,url,isRef);
  342. }
  343. //显示标题及相关样式
  344. function ShowTitle(id)
  345. {
  346.     var objTitle = $("tabFrameTitle");
  347.     for (var i = 0 ; i < objTitle.rows[0].cells.length ; ++i)
  348.     {
  349.         curId = objTitle.rows[0].cells[i].id;
  350.         if(curId != "")
  351.         {
  352.             $("It_"+curId).rows[0].cells[0].className = "tabTitleUnFoucs_l";
  353.             $("It_"+curId).rows[0].cells[1].className = "tabTitleUnFoucs_m";
  354.             $("It_"+curId).rows[0].cells[2].className = "tabTitleUnFoucs_m";
  355.             $("It_"+curId).rows[0].cells[3].className = "tabTitleUnFoucs_r";
  356.         }
  357.     }
  358.     $("It_"+id).rows[0].cells[0].className = "tabTitleFoucs_l";
  359.     $("It_"+id).rows[0].cells[1].className = "tabTitleFoucs_m";
  360.     $("It_"+id).rows[0].cells[2].className = "tabTitleFoucs_m";
  361.     $("It_"+id).rows[0].cells[3].className = "tabTitleFoucs_r";    
  362. }
  363. //显示指定的Iframe
  364. function ShowIframe(id,url,isRef)
  365. {
  366.     var objIframe = $("tdFramePane"); 
  367.     for(i=0;i<objIframe.childNodes.length;i++)
  368.     {
  369.         if(objIframe.childNodes[i].id == "F_"+id)
  370.         {
  371.             objIframe.childNodes[i].style.display = '';
  372.             if(isRef == true)
  373.             {
  374.                 objIframe.childNodes[i].src = url;
  375.             }
  376.         }
  377.         else
  378.         {
  379.             objIframe.childNodes[i].style.display = 'none';
  380.         }
  381.     }
  382. }
  383. function GetBrowser()
  384. {
  385. if (document.all)
  386. return "IE" ;
  387. if (document.layers)
  388. return "NS" ;
  389. return "OTHER" ;
  390. }
  391. //-->