// 代码整理:懒人之家 lanrenzhijia.com var get = { byid: function(id) { return document.getelementbyid(id) }, byclass: function(sclass, oparent) { var aclass = []; var reclass = new regexp("(^| )" + sclass + "( |$)"); var aelem = this.bytagname("*", oparent); for (var i = 0; i < aelem.length; i++) reclass.test(aelem[i].classname) && aclass.push(aelem[i]); return aclass }, bytagname: function(elem, obj) { return (obj || document).getelementsbytagname(elem) } }; window.onload = function () { var onav = get.byid("nav"); var ali = get.bytagname("li", onav); var asubnav = get.byclass("subnav", onav); var osubnav = oem = timer = null; var i = 0; for (i = 1; i < ali.length; i++) { ali[i].onmouseover = function () { //隐藏所有子菜单 for (i = 0; i < asubnav.length; i++)asubnav[i].style.display = "none"; //获取该项下的子菜单 osubnav = get.byclass("subnav", this)[0]; //获取该项下的指示箭头 oem = get.bytagname("em", this)[0]; //显示该项下的子菜单 osubnav.style.display = "block"; //判断显示区域 onav.offsetwidth - this.offsetleft > osubnav.offsetwidth ? //如果在显示范围居左显示 osubnav.style.left = this.offsetleft + "px" : //超出显示范围居右显示 osubnav.style.right = 0; //计算指标箭头显示位置 oem.style.left = this.offsetleft - osubnav.offsetleft + 50 + "px"; cleartimeout(timer); //阻止事件冒泡 osubnav.onmouseover = function (event) { (event || window.event).cancelbubble = true; cleartimeout(timer) } }; ali[i].onmouseout = function () { timer = settimeout(function () { osubnav.style.display = "none" },300) } } };