JS代码之伸缩菜单

源代码(JS文件)

var faisunMenu_openedfolderimage_src="images/openedfolder.gif";//自定义图片路径
var faisunMenu_closedfolderimage_src="images/closedfolder.gif";//自定义图片路径
var faisunMenu_menufileimage_src="images/menufile.gif";//自定义图片路径

var faisunMenu_treetext=new Array();
var faisunMenu_treeurl=new Array();
var faisunMenu_treeurltarget=new Array();

var faisunMenu_treeNum=0;

document.write("<style type='text/css'>.blockhide{display:none;} .blockmove{overflow: hidden;height:1px;display:block;} .blockshow{overflow: visible; display:block;} .hideme{overflow: visible;display:none;} .showme{overflow: visible;display:block;} .faisunMenu td{font-size:13px;} </style>");

window.document.body.onselectstart=new Function("return false");

function outinit(itemNo,dir,blockheight){ //缩小一个div的高度
  var subfiles=document.getElementById("item"+itemNo);
  if(blockheight==0){
 subfiles.className="blockshow";
 subfiles.style.height='';
 blockheight=parseInt(subfiles.offsetHeight);
 if(dir>0) subfiles.className="blockmove";
  }
  var outinspeed=blockheight/10;
  var nowheight=parseInt(subfiles.offsetHeight)+outinspeed*dir;
  if(nowheight<=0){
    subfiles.className="blockhide";
 return;
  }else{
    subfiles.className="blockmove";
  }
  if(nowheight>=blockheight && dir>0){
    subfiles.className="blockshow";
 subfiles.style.height='';
 return;
  }
  subfiles.style.height=nowheight;
  subfiles.scrollTop=blockheight;
  parentsresize(subfiles);
  setTimeout("outinit("+itemNo+","+dir+","+blockheight+")",15);
}

function getcookies(c_name)
{
if(document.cookie.length>0)
{
c_start=document.cookie.indexOf(c_name+"=")
if(c_start!=-1)
{
c_start=c_start+c_name.length+1
c_end=document.cookie.indexOf(";",c_start)
 if (c_end==-1) {c_end=document.cookie.length}
    return unescape(document.cookie.substring(c_start,c_end))

}
else
{
return null;
}
}
}

function setcookies(c_name,value,expiredays)
{

var exdate=new Date();
exdate.setTime(exdate.getTime()+expiredays*24*60*60*1000);
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "":";expires="+exdate.toGMTString());

}

function pdshow()
{
var i=getcookies("cc").split('|');

if(i!=null&&i[0]>1)
{
 if(i[1]<3)
 {
     for(var j=1;j<i[1];j++)
     {
     var obj=document.getElementById("item"+(i[0]-j));
     if(obj!=null)
     {
      obj.className="blockshow";
      document.images["openedfolderimage"+(i[0]-j)].className="showme";
            document.images["closedfolderimage"+(i[0]-j)].className="hideme";
     }
     document.getElementById("item"+i[0]).className="blockshow";
     document.images["openedfolderimage"+i[0]].className="showme";
        document.images["closedfolderimage"+i[0]].className="hideme";
     }
 }
 else
 {
      for(var j=1;j<i[0];j++)
     {
     var obj=document.getElementById("item"+(i[0]-j));
     if(obj!=null)
     {
      obj.className="blockshow";
      document.images["openedfolderimage"+(i[0]-j)].className="showme";
            document.images["closedfolderimage"+(i[0]-j)].className="hideme";
     }
     document.getElementById("item"+i[0]).className="blockshow";
     document.images["openedfolderimage"+i[0]].className="showme";
        document.images["closedfolderimage"+i[0]].className="hideme";
     }
 }
 
}

}

function setco(value)
{

setcookies("cc",value,30);

}

function parentsresize(obj){ //缩小父类div的高度
 do{
  if(obj.className=="faisunMenu"){
   break;
  }
  if(obj.className=="blockshow"){
   obj.style.height="";
  }
 }while(obj=obj.parentElement);
}

function showhideit(itemNo){
  var showfolder=document.images["openedfolderimage"+itemNo];
  var hidefolder=document.images["closedfolderimage"+itemNo];
  var subfiles=document.getElementById("item"+itemNo);
  if(subfiles.className=="blockmove") {return;}

  if(showfolder.className=="hideme") {
 hidefolder.className="hideme";
    showfolder.className="showme";
 outinit(itemNo,1,0);
  }
  else {
 showfolder.className="hideme";
    hidefolder.className="showme";
 outinit(itemNo,-1,0);
  }
}

function addtree(text,url,target){
  faisunMenu_treetext.push(text);
  faisunMenu_treeurl.push(url?url:"");
  faisunMenu_treeurltarget.push(target?target:"mainframe");
}

function getsubnum(text){ //算出前面有几个"-"号
  var newtext=text.replace(/^-*/,"");
  return text.length-newtext.length;
}


function createtree(){

  faisunMenu_treeNum++;
  var treestatus=new Array();
  var treeendlayer=new Array();
  var openedlayer=new Array();

  var next_subnum=0;
 
 
  var tempdiv="";
  for(i=faisunMenu_treetext.length-1;i>=0;i--){ //从后面分析起,是否有为结束位置或有子树枝
    var subnum=getsubnum(faisunMenu_treetext[i]);
 treestatus[i]=0;
 if(subnum<next_subnum){  //有子目录
    treeendlayer[next_subnum]=0;
    treestatus[i]+=1;
 }
 if(!treeendlayer[subnum]){ //结束位置
    treeendlayer[subnum]=1;
    treestatus[i]+=2;
 }
 //显然地,既有子目录又是结束位置时 treestatus[i]=3;
 next_subnum=subnum;
  }
 
  var echo="<div class='faisunMenu'>";
  for(i=0;i<faisunMenu_treetext.length;i++){
     if(!faisunMenu_treetext[i]) continue;
  var subnum=getsubnum(faisunMenu_treetext[i]);
  var newtext=faisunMenu_treetext[i].replace(/^-*/*?/,"");
 
  if(treestatus[i]==1||treestatus[i]==3){
    var havechild=1;
  }else{
    var havechild=0;
  }

  if(treestatus[i]==2||treestatus[i]==3){
    openedlayer[subnum]=0;
    var barstatus=2;
  }else{
    openedlayer[subnum]=1;
    var barstatus=1;  
  }
 
 

  var showme=faisunMenu_treetext[i].match(/^-*/*/);
  var openfold=(i==faisunMenu_treetext.length-1?0:faisunMenu_treetext[i+1].match(/^-*/*/));
  var li=i-1;
     if(i>0&&(treestatus[li]==1||treestatus[li]==3)){
    echo += "<div id='item"+faisunMenu_treeNum+li+"' class='"+(showme?"blockshow":"blockhide")+"'>";
    tempdiv=faisunMenu_treeNum+""+li;
  }
  echo += "<table border='0' cellspacing='0' cellpadding='0' "+(subnum==0?"height=50":"")+"><tr>/n";
 for(j=1;j<subnum;j++){
   echo += "<td width='20' height='25'  valign=bottom></td>/n";
 }
 if(subnum>0){
   echo += "<td width='20' height='25'   valign=bottom></td>";
 }
 var clicktoshowhide=(havechild?" οnclick='showhideit("+faisunMenu_treeNum+""+i+")' style='cursor:pointer;' ":"οnclick='setco(/""+tempdiv+"|"+subnum+"/")'");
    echo += "<td width='23' height='25'  valign=middle "+clicktoshowhide+"><img name='openedfolderimage"+faisunMenu_treeNum+""+i+"' src='"+(havechild?faisunMenu_openedfolderimage_src:faisunMenu_menufileimage_src)+"' class='"+(openfold?"showme":"hideme")+"' width='9' height='10'><img name='closedfolderimage"+faisunMenu_treeNum+""+i+"' src='"+(havechild?faisunMenu_closedfolderimage_src:faisunMenu_menufileimage_src)+"' class='"+(openfold?"hideme":"showme")+"' width='14' height='15'></td>";
 echo += "<td nowrap valign=bottom><a οnmοusedοwn='return false;' "+clicktoshowhide+" "+(faisunMenu_treeurl[i]?"href='"+faisunMenu_treeurl[i]+"'":"name='#'")+" target='"+faisunMenu_treeurltarget[i]+"'>"+newtext+"</a></td></tr></table>/n/n"; 

     if(barstatus==2&&!havechild){
    for(j=subnum;j>=0;j--){
      if(!openedlayer[j]) echo += "</div>";else break;
    }
  }
  }
  echo += "</div>";
  document.write(echo);
  //清空列表以接受下一个菜单

   pdshow();


 
 
  faisunMenu_treetext=new Array();
  faisunMenu_treeurl=new Array();
  faisunMenu_treeurltarget=new Array();

}
/************************* /

例:
addtree("标题一","title1.htm");
addtree("-子目录一","sunmenu1.htm");
addtree("-子目录二","sunmenu1.htm");
createtree();

.可以建立多个目录树,重复上面的代码即可.

.addtree()三个参数:
  (1) 显示的文本,有几个"-"号表位于几层,"-"号后紧跟"*"号表该层默认展开
  (2) URL;
  (3) target,URL的打开目标窗口,默认"forummainframe"
createtree();生成一个目录树,可以生成多个

/ ************************/

/*  alert("表单中所有文本框通过校验!");  
*/  
function checkAllTextValid(form)   
{   
    //记录不含引号的文本框数量   
var resultTag = 0;   
    //记录所有text文本框数量   
    var flag = 0;   
for(var i = 0; i < form.elements.length; i ++)   
{   
  if(form.elements[i].type=="text")   
  {   
            flag = flag + 1;   
   //此处填写所要过滤的特殊符号   
   //注意:修改####处的字符,其它部分不许修改.   
   //if(/^[^####]*$/.test(form.elements[i].value))    
  
   if(/^[^/|"'<>]*$/.test(form.elements[i].value))  
                resultTag = resultTag+1;  
   else  
    form.elements[i].select();  
  }  
}  
 
    /**  
     * 如果含引号的文本框等于全部文本框的值,则校验通过  
     */  
if(resultTag == flag)  
  return true;  
else  
{  
  alert("文本框中不能含有/n/n 1 单引号: ' /n 2 双引号: /" /n 3 竖  杠: | /n 4 尖角号: < > /n/n请检查输入!");   
  return false;   
}   
}
 

 

 

 

调用方法(html文件)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script language='JavaScript' src='menutree.js'></script>
</head>

<body>
<!--<div id="test"><textarea id="tt"></textarea></div>-->

<script language='JavaScript'>
addtree('-*柔性焊接夹具台系统');
addtree('--16系列');
addtree('---工作平台','1.html',"_blank");
addtree('---支撑件','2.html',"_blank");
addtree('---定位件','3.html',"_blank");
addtree('---压紧件','4.html',"_blank");
addtree('---锁紧件','#');
addtree('---附件及辅助材料','#');
addtree('--28系列');
addtree('---工作平台','#');
addtree('---支撑件','#');
addtree('---定位件','#');
addtree('---压紧件','#');
addtree('---锁紧件','#');
addtree('---附件及辅助材料','#');
addtree('-机床柔性夹具系统');
addtree('--通用机床定位系列','3.html');
addtree('--CNC机床定位系统','#');
addtree('-转角缸夹具系列');
addtree('--空压转角缸夹具','#');
addtree('--油压转角缸夹具','#');
addtree('--高压转角缸夹具','#');
addtree('--支撑缸','#');
addtree('--配件','#');
addtree('-肘节夹具系列');
addtree('--垂直式','#');
addtree('--水平式','#');
addtree('--推拉式','#');
addtree('--拉扣式','#');
addtree('--焊接组合式','#');
addtree('--气动式','#');
addtree('-钳夹具元件');
addtree('--大力钳','#');
addtree('--F夹钳','#');
addtree('--C夹钳','#');
addtree('--多功能夹钳','#');
addtree('--拔轮夹钳','#');
addtree('-工装调整垫片系列');
addtree('-工装定位导向系统');
addtree('-工装支架托快系列');
addtree('-对板工装元件');
addtree('-组合式铝结构元件');
addtree('-柔性组合测量系统元件');
createtree();

</script>

</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值