温馨提示:代码在线浏览功能只能做为源码浏览参考,不能展示项目的全部,如果想更进一步了解该代码请下载:HeroBeastControls的NavMenu导航控件Demo及源码
当前文件路径:HeroBeastControlsNavMenu/NavMenu/Javascript/NavMenu.js

1//NavMenu 2
3
function NavMenu(id) { 4
if (!document.getElementById || !document.getElementsByTagName) 5
return false; 6
this.menu = document.getElementById(id); 7
this.submenus = this.menu.getElementsByTagName("div"); 8
this.speed = 4; 9
this.markCurrent= true; 10
} 11
NavMenu.prototype.init = function() { 12
var mainInstance = this; 13
for (var i = 0; i < this.submenus.length; i++) { 14
this.submenus[i].getElementsByTagName("span")[0].onclick = function() { 15
mainInstance.toggleMenu(this.parentNode); 16
}; 17
} 18
if (this.markCurrent) { 19
var links = this.menu.getElementsByTagName("a"); 20
for (var i = 0; i < links.length; i++) { 21
if (links[i].href == document.location.href) { 22
links[i].className = "current"; 23
break; 24
} 25
links[i].onclick = function() { 26
for (var k = 0; k < links.length; k++) { 27
links[k].className = ""; 28
} 29
this.className = "current"; 30
this.blur(); 31
} 32
} 33
} else { 34
var links = this.menu.getElementsByTagName("a"); 35
for (var i = 0; i < links.length; i++) { 36
links[i].onclick = function() { 37
for (var k = 0; k < links.length; k++) { 38
links[k].className = ""; 39
} 40
this.className = "current"; 41
this.blur(); 42
} 43
} 44
} 45
}; 46
NavMenu.prototype.toggleMenu = function(submenu) { 47
if (submenu.className == "collapsed") 48
this.expandMenu(submenu); 49
else 50
this.collapseMenu(submenu); 51
}; 52
NavMenu.prototype.expandMenu = function(submenu) { 53
var fullHeight = submenu.getElementsByTagName("span")[0].offsetHeight; 54
var links = submenu.getElementsByTagName("a"); 55
for (var i = 0; i < links.length; i++) 56
fullHeight += links[i].offsetHeight; 57
var moveBy = Math.round(this.speed * links.length); 58
59
var mainInstance = this; 60
var intId = setInterval(function() { 61
var curHeight = submenu.offsetHeight; 62
var newHeight = curHeight + moveBy; 63
if (newHeight < fullHeight) 64
submenu.style.height = newHeight + "px"; 65
else { 66
clearInterval(intId); 67
submenu.style.height = ""; 68
submenu.className = ""; 69
} 70
}, 30); 71
for (var i = 0; i < this.submenus.length; i++) { 72
if (this.submenus[i] != submenu && this.submenus[i].className != "collapsed") { 73
this.collapseMenu(this.submenus[i]); 74
} 75
} 76
}; 77
NavMenu.prototype.collapseMenu = function(submenu) { 78
var minHeight = submenu.getElementsByTagName("span")[0].offsetHeight; 79
var moveBy = Math.round(this.speed * submenu.getElementsByTagName("a").length); 80
var mainInstance = this; 81
var intId = setInterval(function() { 82
var curHeight = submenu.offsetHeight; 83
var newHeight = curHeight - moveBy; 84
if (newHeight > minHeight) 85
submenu.style.height = newHeight + "px"; 86
else { 87
clearInterval(intId); 88
submenu.style.height = ""; 89
submenu.className = "collapsed"; 90
} 91
}, 30); 92
};




}
}