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