Wu.Country@侠缘

勤学似春起之苗,不见其增,日有所长; 辍学如磨刀之石,不见其损,日所有亏!

导航

[导入]从MM里找出来的一个菜单生成的代码。

MM可以自动生成菜单,但效果不是很好,特别是我想动态的修改菜单的时候,不是很好。看了一下,这是它的主要内容:

 window.mm_menu_0427080228_0 = new Menu("root",88,18,"",12,"#000000","#FFFFFF","#FF9900","#000084","left","middle",3,0,500,-5,7,true,true,true,0,false,false);
 mm_menu_0427080228_0.addMenuItem("新建项目");
 mm_menu_0427080228_0.addMenuItem("新建项目");
 mm_menu_0427080228_0.addMenuItem("新建项目");
 mm_menu_0427080228_0.hideOnMouseOut=true;
 mm_menu_0427080228_0.bgColor='#666666';
 mm_menu_0427080228_0.menuBorder=1;
 mm_menu_0427080228_0.menuLiteBgColor='#FFFFFF';
 mm_menu_0427080228_0.menuBorderBgColor='#999999';

于是可以这样的在ASP或者其它文件生成程序里动态的生成脚本:

 temp_string = "window.mm_menu_2_1"&" = new Menu('root',80,20,'',12,'#187094','#187094','#F7F2E1','#D5EAF4','left','middle',3,0,300,-5,0,true,true,true,0,false,false);"&chr(13)
 temp_string = temp_string&"mm_menu_2_1.hideOnMouseOut=true;"&chr(13)
 temp_string = temp_string&"mm_menu_2_1.bgColor='#666666';"&chr(13)
 temp_string = temp_string&"mm_menu_2_1.menuBorder=1;"&chr(13)
 temp_string = temp_string&"mm_menu_2_1.menuLiteBgColor='#FFFFFF';"&chr(13)
 temp_string = temp_string&"mm_menu_2_1.menuBorderBgColor='#999999';"&chr(13)
 SQL = "select * from t_pageSort where s_parID=-1 and s_ver='cn' order by s_sort"
 menuRs.open SQL,conn,1,1
 do until menuRs.eof
  sub_menu = ""
  sub_menu = """<a href='m_subPage.asp?m_title_s="&menuRs("s_title")&"&m_type=ListSubCatalog&m_id="&menuRs("s_id")&"'>"&menuRs("s_title")&"</a>"""
  temp_string = temp_string&"mm_menu_2_1.addMenuItem("&sub_menu&");"&chr(13)
  menuRs.moveNext
 loop
 menuRs.close  
 Response.Write(temp_string)
 Response.Write("//添加完一组菜单,主栏目标题:"&chr(13))

 Response.Write(temp_string)
 Response.Write("//添加完一组菜单,主栏目标题:"&chr(13))
 '在这里可以添加其它的菜单
 set menuRs = nothing
 set menuRs = nothing
 Response.Write("mm_menu_0.writeMenus();"&chr(13))
 Response.Write("}"&chr(13))
 CloseConn

这是个好方法,不仅可以从数据库里生成动态的菜单,而且配置也很方便。

<a href="m_subPage.asp"  class="link"          id="menu_06" onMouseOver="MM_showMenu(window.mm_menu_2_1,-5,20,null,'menu_06')" onMouseOut="MM_startTimeout();">基层财政</a>

我找了一下里面的核心代码,发现这两个函数很有用,就独立的找出来了,而且可以在其它的应用程序里引用:

 function moveXbySlicePos (x, img) {
  if (!document.layers) {
   var onWindows = navigator.platform ? navigator.platform == "Win32" : false;
   var macIE45 = document.all && !onWindows && getExplorerVersion() == 4.5;
   var par = img;
   var lastOffset = 0;
   while(par){
    if( par.leftMargin && ! onWindows ) x += parseInt(par.leftMargin);
    if( (par.offsetLeft != lastOffset) && par.offsetLeft ) x += parseInt(par.offsetLeft);
    if( par.offsetLeft != 0 ) lastOffset = par.offsetLeft;
    par = macIE45 ? par.parentElement : par.offsetParent;
   }
  } else if (img.x) x += img.x;
  return x;
 }
 
 function moveYbySlicePos (y, img) {
  if(!document.layers) {
   var onWindows = navigator.platform ? navigator.platform == "Win32" : false;
   var macIE45 = document.all && !onWindows && getExplorerVersion() == 4.5;
   var par = img;
   var lastOffset = 0;
   while(par){
    if( par.topMargin && !onWindows ) y += parseInt(par.topMargin);
    if( (par.offsetTop != lastOffset) && par.offsetTop ) y += parseInt(par.offsetTop);
    if( par.offsetTop != 0 ) lastOffset = par.offsetTop;
    par = macIE45 ? par.parentElement : par.offsetParent;
   }  
  } else if (img.y >= 0) y += img.y;
  return y;
 }
利用这两个函数可以用ID找到对象在屏幕上的绝对位置,这样可以很方便的在其它的地方来使用它。

还有这个函数,返回引用的对象。

function FIND(item) {
 if( window.mmIsOpera ) return(document.getElementById(item));
 if (document.all) return(document.all[item]);
 if (document.getElementById) return(document.getElementById(item));
 return(false);
}

而且引用也很有意思:

var obj = FIND(imgname) || document.images[imgname] || document.links[imgname] || document.anchors[imgname];

自己做一个特效菜单,可以淡出淡入,呵呵,小有点意思。


文章来源:http://computer.mblogger.cn/wucountry/posts/44334.aspx

posted on 2005-08-19 22:30  Wu.Country@侠缘  阅读(323)  评论(0编辑  收藏  举报