本文介绍一种利用少量JavaScript和CSS实现的仿QQ好友列表折叠树形菜单。该方案通过简单的DOM操作实现展开与收起功能,包含完整的HTML结构与JS逻辑,适合需要类似交互效果的项目参考。
仿QQ面板折叠树形菜单实现
本文展示了一个使用JavaScript和CSS构建的仿QQ好友列表及黑名单样式的树形菜单实例,供读者参考学习。
该菜单设计精良,虽部分图标路径未提供,但使用者可自行替换折叠与展开状态的图标以完善视觉效果。此功能模仿了QQ面板的交互逻辑,尽管代码量精简,却实现了预期的折叠效果,具有较高的实用价值。
运行效果如下图所示:

在线演示地址如下:
http://demo.jb51.net/js/2015/js-css-qq-hy-hmd-style-menu-codes/
具体实现代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>QQ好友/黑名单的树型菜单</TITLE>
</HEAD>
<BODY>
<script>
if (!document.getElementById)
document.getElementById = function() { return null; }
function initializeMenu(menuId, actuatorId) {
var menu = document.getElementById(menuId);
var actuator = document.getElementById(actuatorId);
if (menu == null || actuator == null) return;
actuator.parentNode.style.backgroundImage = "url()";
actuator.onclick = function() {
var display = menu.style.display;
this.parentNode.style.backgroundImage =
(display == "block") ? "url()" : "url()";
menu.style.display = (display == "block") ? "none" : "block";
return false;
}
}
window.onload = function() {
initializeMenu("productsMenu", "productsActuator");
initializeMenu("newPhonesMenu", "newPhonesActuator");
initializeMenu("compareMenu", "compareActuator");
}
</script>
<style>
body {
font-family: verdana, helvetica, arial, sans-serif;
}
#mainMenu {
background-color: #EEE;
border: 1px solid #CCC;
color: #000;
width: 203px;
}
#menuList {
margin: 0px;
padding: 10px 0px 10px 15px;
}
li.menubar {
background: url() no-repeat 0em 0.3em;
font-size: 12px;
line-height: 1.5em;
list-style: none outside;
}
.menu, .submenu {
display: none;
margin-left: 15px;
padding: 0px;
}
.menu li, .submenu li {
background: url() no-repeat 0em 0.3em;
list-style: none outside;
}
a.actuator {
background-color: transparent;
color: #000;
font-size: 12px;
padding-left: 15px;
text-decoration: none;
}
a.actuator:hover {
text-decoration: underline;
}
.menu li a, .submenu li a {
background-color: transparent;
color: #000;
font-size: 12px;
padding-left: 15px;
text-decoration: none;
}
.menu li a:hover, submenu li a:hover {
text-decoration: underline;
}
span.key {
text-decoration: underline;
}
</style>
</head>
<body>
<div id="mainMenu">
<ul id="menuList">
<li class="menubar">
<a href="#" id="productsActuator" class="actuator">图秀地带收藏夹</a>
<ul id="productsMenu" class="menu">
<li>
<a href="#" id="newPhonesActuator" class="actuator">我的好友</a>
<ul id="newPhonesMenu" class="submenu">
<li><a href="#">张三[10000001]</a></li>
<li><a href="#">李四[10000002]</a></li>
<li><a href="#">张三[10000001]</a></li>
<li><a href="#">李四[10000002]</a></li>
</ul>
</li>
<li>
<a href="#" id="compareActuator" class="actuator">陌生人</a>
<ul id="compareMenu" class="submenu">
<li><a href="#">张三[10000001]</a></li>
<li><a href="#">李四[10000002]</a></li>
<li><a href="#">张三[10000001]</a></li>
<li><a href="#">李四[10000002]</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</body>
</BODY>
</HTML>
希望本文所述的JavaScript程序设计内容能为您提供帮助。