- 编写
dropdown.js脚本文件:创建核心的下拉菜单逻辑。 - 在模板文件中引入脚本:将你的 JS 文件和必要的 CSS 样式加载到网页中。
- 编写 HTML 结构:在需要的地方放置菜单的 HTML 代码。
第一步:创建 dropdown.js 脚本文件
这个文件是下拉菜单的大脑,负责处理鼠标事件(如 mouseenter 和 mouseleave),实现菜单的显示和隐藏。

创建一个名为 dropdown.js 的文件,并将以下代码复制进去,这个脚本使用了 jQuery,因此确保你的织梦模板已经加载了 jQuery 库(通常在 /include/dedeajax2.js 或 /js/jquery.min.js 中)。
/**
* 织梦CMS通用下拉菜单脚本
* 文件名: dropdown.js
* 使用方法: 1. 在模板中引入此JS文件和必要的CSS
* 2. 给父级菜单项添加 class="dropdown"
* 3. 给子级菜单容器添加 class="dropdown-menu"
*/
(function($) {
$(document).ready(function() {
// 1. 选择所有带有 'dropdown' class 的元素
var $dropdowns = $('.dropdown');
// 2. 为每个下拉菜单父级绑定鼠标进入事件
$dropdowns.on('mouseenter', function() {
// 当鼠标进入时,找到其内部的子菜单并显示
$(this).children('.dropdown-menu').stop(true, true).fadeIn(200); // fadeIn 是淡入效果,stop() 防止动画队列堆积
});
// 3. 为每个下拉菜单父级绑定鼠标离开事件
$dropdowns.on('mouseleave', function() {
// 当鼠标离开时,找到其内部的子菜单并隐藏
$(this).children('.dropdown-menu').stop(true, true).fadeOut(200); // fadeOut 是淡出效果
});
// 可选:为了更好的移动端体验,可以添加点击事件
// 但通常下拉菜单主要用于桌面端,这里作为扩展思路
/*
$dropdowns.on('click', function(e) {
e.preventDefault(); // 阻止默认的链接跳转行为
$(this).children('.dropdown-menu').stop(true, true).slideToggle(200);
});
*/
});
})(jQuery);
代码解释:
(function($){ ... })(jQuery);:这是一种“立即执行函数表达式”(IIFE),它能确保 符号在当前作用域内代表 jQuery,避免与其他库冲突。$(document).ready(function() { ... });:确保整个 HTML 文档加载完毕后,再执行此脚本中的代码。$('.dropdown'):选择所有 CSS 类名为dropdown的元素,这些元素将作为下拉菜单的触发器(通常是<li>或<a>标签)。.on('mouseenter', function() { ... }):当鼠标移动到.dropdown元素上时,触发后面的函数。$(this).children('.dropdown-menu'):$(this)指代当前被鼠标悬停的.dropdown元素。.children()用于查找其直接子元素,这里我们寻找类名为dropdown-menu的子元素(即下拉菜单本身)。.stop(true, true).fadeIn(200):.stop(): 停止当前正在执行的动画,防止快速移动鼠标时动画卡顿或闪烁。.fadeIn(200): 在 200 毫秒内以淡入的方式显示子菜单,你也可以使用.slideDown(200)实现向下滑动的效果。
.on('mouseleave', function() { ... }):当鼠标离开.dropdown元素时,触发隐藏菜单的函数,逻辑与显示相反,使用.fadeOut(200)或.slideUp(200)。
第二步:在织梦模板中引入脚本和样式
你需要将 dropdown.js 文件和配套的 CSS 文件放到你的织梦模板目录中,/templets/default/js/ 和 /templets/default/css/。
假设你的 JS 文件路径是 /templets/default/js/dropdown.js,CSS 文件路径是 /templets/default/css/dropdown.css。

打开你想要添加下拉菜单的织梦模板文件,通常是 head.htm(全局头部模板)或具体的列表/首页模板文件(如 index.htm)。
在 <head> 标签内添加以下代码来引入 CSS 和 JS 文件,织梦的 {dede:global.cfg_cmsurl/} 变量可以帮你获取网站根目录。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">{dede:global.cfg_webname/}</title>
<!-- 引入你的下拉菜单样式文件 -->
<link rel="stylesheet" type="text/css" href="{dede:global.cfg_cmsurl/}/templets/default/css/dropdown.css">
<!-- 织梦系统通常已经内置了jQuery,如果不确定,可以手动引入 -->
{dede:global.cfg_pluspath/}/js/jquery.min.js">
<!-- 引入你的下拉菜单脚本文件,务必放在jQuery之后 -->
<script type="text/javascript" src="{dede:global.cfg_cmsurl/}/templets/default/js/dropdown.js"></script>
</head>
<body>
<!-- 页面内容 -->
</body>
</html>
第三步:编写 HTML 结构和 CSS 样式
我们需要在导航栏等地方,按照 JS 脚本期望的结构来编写 HTML,并用 CSS 来美化它。
CSS 样式 (dropdown.css)
创建 dropdown.css 文件,内容如下:
/* 1. 重置和基础样式(可选) */
.dropdown, .dropdown-menu {
margin: 0;
padding: 0;
list-style: none;
}
/* 2. 下拉菜单触发器样式 */
.dropdown > a { /* 假设触发器是 <a> 标签 */
display: block; /* 让 a 标签可以撑满父级 li 的空间 */
padding: 10px 15px;
text-decoration: none;
color: #333;
background-color: #f8f8f8;
border: 1px solid #ddd;
}
.dropdown > a:hover {
background-color: #e7e7e7;
}
/* 3. 下拉菜单容器样式 - 初始状态为隐藏 */
.dropdown-menu {
position: absolute; /* 关键:脱离文档流,相对于最近的定位父级 */
top: 100%; /* 放在触发器的正下方 */
left: 0;
min-width: 160px; /* 设置一个最小宽度 */
background-color: #fff;
border: 1px solid #ddd;
border-top: none; /* 和触发器边框重叠,形成一体感 */
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
display: none; /* 默认隐藏,由JS控制显示 */
z-index: 1000; /* 确保菜单显示在其他内容之上 */
}
/* 4. 子菜单项样式 */
.dropdown-menu li a {
display: block;
padding: 10px 15px;
text-decoration: none;
color: #333;
}
.dropdown-menu li a:hover {
background-color: #f1f1f1;
}
HTML 结构
在织梦的导航栏模板文件中(通常是 head.htm 或 nav.htm),找到导航循环代码,并修改成支持下拉菜单的结构。
织梦的导航标签通常是 {dede:channelartlist} 或 {dede:channel}。
示例:修改 channelartlist 模板
假设你的原始导航代码是这样的:
<ul id="nav">
{dede:channelartlist typeid='top'}
<li><a href='{dede:field.typeurl/}'>{dede:field.typename/}</a></li>
{/dede:channelartlist}
</ul>
你需要修改它,使其支持二级菜单,这里需要一个更复杂的嵌套循环。
<ul id="nav">
{dede:channelartlist typeid='top' row='8'}
<li class="dropdown">
<!-- 一级菜单项 -->
<a href="{dede:field.typeurl/}">{dede:field.typename/}</a>
<!-- 二级菜单容器 -->
<ul class="dropdown-menu">
{dede:channel type='son' noself='yes'}
<li><a href="[field:typename/]">[field:typename/]</a></li>
{/dede:channel}
</ul>
</li>
{/dede:channelartlist}
</ul>
HTML 结构解析:
- 我们给包含一级菜单和二级菜单的
<li>添加了class="dropdown",这正是我们的 JS 脚本要寻找的元素。 - 在这个
<li>内部,我们放置了<a>标签作为触发器。 - 紧接着,我们放置了一个
<ul class="dropdown-menu">,这就是下拉菜单的内容容器,默认由 CSS 隐藏。 {dede:channel type='son' noself='yes'}这个标签专门用于获取当前栏目的所有子栏目,并将其作为二级菜单项填充进去。
通过以上三个步骤,你就可以在织梦系统中成功实现一个功能完善、样式美观的下拉菜单了。
dropdown.js:负责交互逻辑(鼠标悬停时显示/隐藏)。dropdown.css:负责菜单的样式和定位(隐藏、位置、颜色等)。- HTML 模板:提供符合 JS 和 CSS 要求的 DOM 结构(
<li class="dropdown">包含<ul class="dropdown-menu">)。
你可以根据这个基础框架,进一步定制菜单的样式、动画效果和层级(支持三级、四级菜单等)。
