css菜单伸缩效果图,使用纯JavaScript+CSS制作伸缩菜单

//在ID为“js_menu”的div内开始程序

function initMenu(){

var pm_menu = new JSMenu("js_menu");

pm_menu.init();

}

//定义主函数

function JSMenu(id) {

if (!document.getElementById || !document.getElementsByTagName)

return false;

this.menu = document.getElementById(id);

this.submenus = this.menu.getElementsByTagName("div");

}//引入函数,取得所有span

JSMenu.prototype.init = function() {

var mainInstance = this;

for (var i = 0; i < this.submenus.length; i++)

this.submenus[i].getElementsByTagName("span")[0].onclick = function() {

mainInstance.toggleMenu(this.parentNode);

};

this.expandOne();

};//展开含"current"的菜单

JSMenu.prototype.expandOne = function() {

for (var i = 0; i < this.submenus.length; i++) {

var links = this.submenus[i].getElementsByTagName("a");

for (var j = 0; j < links.length; j++){

if (links[j].className == "current")

this.expandMenu(this.submenus[i]);

}

}

};//变换菜单状态函数

JSMenu.prototype.toggleMenu = function(submenu) {

if (submenu.className == "collapsed")

this.expandMenu(submenu);

else

this.collapseMenu(submenu);

};//展开所有菜单函数

JSMenu.prototype.expandMenu = function(submenu) {

var fullHeight = submenu.getElementsByTagName("span")[0].offsetHeight;

var links = submenu.getElementsByTagName("a");

for (var i = 0; i < links.length; i++)

fullHeight += links[i].offsetHeight;

var moveBy = Math.round(5 * links.length);

var mainInstance = this;

var intId = setInterval(function() {

var curHeight = submenu.offsetHeight;

var newHeight = curHeight + moveBy;

if (newHeight < fullHeight)

submenu.style.height = newHeight + "px";

else {

clearInterval(intId);

submenu.style.height = "";

submenu.className = "";

}

}, 30);

this.collapseOthers(submenu);

};//折叠菜单函数

JSMenu.prototype.collapseMenu = function(submenu) {

var minHeight = submenu.getElementsByTagName("span")[0].offsetHeight;

var moveBy = Math.round(5 * submenu.getElementsByTagName("a").length);

var mainInstance = this;

var intId = setInterval(function() {

var curHeight = submenu.offsetHeight;

var newHeight = curHeight - moveBy;

if (newHeight > minHeight)

submenu.style.height = newHeight + "px";

else {

clearInterval(intId);

submenu.style.height = "";

submenu.className = "collapsed";

}

}, 30);

};//折叠其他菜单函数

JSMenu.prototype.collapseOthers = function(submenu) {

for (var i = 0; i < this.submenus.length; i++)

if (this.submenus[i] != submenu && this.submenus[i].className != "collapsed")

this.collapseMenu(this.submenus[i]);

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值