您的位置:首页 > 其它

脚本复杂又简单--一个菜单模块

2006-10-28 13:33 309 查看
这里的脚本仅指jscript

脚本是复杂又简单的.说简单,是因为它是对象加上层次结构,甚至数组都是对象而不是数据结构,而且是浏览器中已内在声明了的,让你用就是.说复杂,是因为它的简单,让你在一些数据结构与算法的处理上得动一翻脑筋,也得对浏览器有深入的了解.下面是一个菜单模块,没进入文章正文就能正常显示,当进入文章正文阅读后就不能正常运行了.

var h,w,l,t;
var TempMenu=0,TempShow=false,b_false,b_true;//临时变量,b_false,b_true为阻赛代号
var stylelist = '设置1
设置2
设置3
设置4
设置5
';

function Lzy_Alpha(a,b)//淡入淡出循环,a表对象b来区别是show or hide
{
if(b)
{clearTimeout(b_false);//阻塞
if(TempMenu<81)
{
TempMenu+=2;
a.filters.Alpha.Opacity =TempMenu;
b_true=setTimeout("Lzy_Alpha(MenuDiv,1)",1);
}}
else
{clearTimeout(b_true);//阻塞
if(TempMenu>0)
{
TempMenu-=2;
if(TempMenu<=0)MenuDiv.style.visibility = "hidden";
a.filters.Alpha.Opacity =TempMenu;
b_false=setTimeout("Lzy_Alpha(MenuDiv,0)",1);
}}
}

function ShowMenu(MenuCode,tWidth)//参数分别表,菜单内容与菜单宽度
{
vSrc = window.event.srcElement;
h = vSrc.offsetHeight;
w = vSrc.offsetWidth;
l = vSrc.offsetLeft +2;
t = vSrc.offsetTop + h-1;//与上一行一起,设置菜单出现的位置
if(w > tWidth ){tWidth=w;} //确保菜单与事件标签同宽
MenuCode = "
" + MenuCode + "
";

vParent = vSrc.offsetParent;//如果其父标签使用了相对或绝对位置,进行位移补偿
while (vParent.tagName.toUpperCase() != "BODY")
{
l += vParent.offsetLeft;
t += vParent.offsetTop;
vParent = vParent.offsetParent;
}
MenuDiv.innerHTML = MenuCode;//注入
MenuDiv.style.top = t;
MenuDiv.style.left = l;
MenuDiv.style.visibility = "visible";
TempShow=true;
Lzy_Alpha(MenuDiv,TempShow);//渐深
}

function HideMenu()
{
if(TempShow)
{
mX = window.event.clientX + document.body.scrollLeft;
mY = window.event.clientY + document.body.scrollTop;
if ((mX < parseInt(MenuDiv.style.left)) || (mX > parseInt(MenuDiv.style.left)+MenuDiv.offsetWidth) || (mY < parseInt(MenuDiv.style.top)-h) || (mY > parseInt(MenuDiv.style.top)+MenuDiv.offsetHeight))//判断mouse移出菜单外
{TempShow=false;
Lzy_Alpha(MenuDiv,TempShow);//渐淡
}
}
}

淡入淡出菜单

因为弹出菜单里的某些脚本代码与网页的某些语句冲突了,浏览器对象不存在,对象同名了 等等.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: