jQuery 打造动态下滑菜单实现说明


Posted in Javascript onApril 15, 2010

jQuery的"write less, do more"的特性可谓是家喻户晓,即使没有很丰富JS编程经验的人,也可以通过其提供的API很快学会如何使用,当然,如果您经验丰富,我还是建议您可以理解jQuery各主要函数的实现原理,其他不说了,直接看看如何用它来实现菜单神奇的效果吧。
jQuery 打造动态下滑菜单实现说明
Step1 - HTML结构

看一下菜单的HTML代码,跟平常的菜单代码没有什么区别:

<div id="menu" class="menu"> 
<ul> 
<li><a href="javascript:;">Home</a></li> 
<li><a href="javascript:;">HTML/CSS</a></li> 
<li><a href="javascript:;">JavaScript</a></li> 
<li><a href="javascript:;">Resources</a></li> 
<li><a href="javascript:;">Tutorials</a></li> 
<li><a href="javascript:;">About</a></li> 
</ul> 
</div>

关键在于利用脚本在每个锚点(a元素)中建立几个分隔层,这样就可以在鼠标悬停时分别控制它们产生动画。为此,我们要在DOM加载完成时候修改DOM的结构,使得每个锚点代码变成如下:

<a href="javascript:;"> 
<span class="out">Home</span> 
<span class="bg"></span> 
<span class="over">Home</span> 
</a>

原先的每个锚点中的内容会被附加到两个span元素(.out和.over)里面,另外一个span元素(.bg)为背景图片层。

至于如何修改DOM结构,JS代码将在Step3中讲解。
Step2 - CSS样式

在示例中,展示了两种样式,有使用背景图的和没有使用背景图的(具体查看演示),您也可以自由定制自己的样式,以设计出更炫酷的菜单,这里提供基本的样式和解释:

/* 以下是菜单基本的样式 */ 
.menu ul li { 
float: left; 
/* 菜单子元素的内容超出不可见 */ 
overflow: hidden; 
/* 以下省略部分代码 */ 
} 
.menu ul li a { 
/* 必须是相对定位 */ 
position: relative; 
display: block; 
width: 110px; 
/* 以下省略部分代码 */ 
} 
.menu ul li a span { 
/* 所有层将使用绝对定位 */ 
position: absolute; 
left: 0; 
width: 110px; 
} 
.menu ul li a span.out { 
top: 0px; 
} 
.menu ul li a span.over, 
.menu ul li a span.bg { 
/* 起初.over层和.bg层相对a元素-45px以达到隐藏的效果 */ 
top: -45px; 
} 
/* 以下是使用背景图的示例 */ 
#menu { 
/* 菜单背景 */ 
background:url(bg_menu.gif) scroll 0 -1px repeat-x; 
border:1px solid #CCC; 
} 
#menu ul li a { 
color: #000; 
} 
#menu ul li a span.over { 
color: #FFF; 
} 
#menu ul li span.bg { 

/* 指定高度和背景图 */ 
height: 45px; 
background: url(bg_over.gif) center center no-repeat; 
}

您也可以在自行定制CSS样式,这里还提供了简化版的样式(查看演示)
Step3 - JavaScript代码

首先要做的是,实现Step1中所说的,在DOM加载完成后修改其DOM结构,具体做法如下:

// 把每个a中的内容包含到一个层(span.out)中, 
// 然后再在span.out层后面追加背景图层(span.bg) 
$("#menu li a").wrapInner( '<span class="out"></span>' ) 



 .append( '<span class="bg"></span>' ); 
// 循环为菜单的a每个添加一个层(span.over) 
$("#menu li a").each(function() { 

$( '<span class="over">' + $(this).text() + '</span>' ) 




 .appendTo( this ); 
});

在讲动画代码之前,先看一下动画的过程,如下图所示:
jQuery 打造动态下滑菜单实现说明
在Step1中我们知道DOM加载后,a元素中建立了几个分隔层,在Step2中,CSS样式中,我们设置了span.bg和span.over层的top属性为-45px,因为span元素已设置为绝对定位,它将相对于li a 元素向上-45px,因为li元素内容超出不可见,所以开始时,.bg层和.over层位于空间范围外。

我们要设置的动画过程是,当鼠标悬停时,三个层同时向下移动,span.out层向下移动至移除可见范围,span.over和span.bg移动进入可见区域,设置span.bg速度比span.over速度稍快,错位产生更加效果。

要实现这样动画效果,使用jQuery的.animate()方法很容易就可以实现,以下是JS代码和解释:

$("#menu li a").hover(function() { 
// 鼠标悬停时候被触发的函数 
$(".out",this).stop().animate({'top':'45px'},250);//下滑至隐藏 
$(".over",this).stop().animate({'top':'0px'},250); //下滑至显示 
$(".bg",this).stop().animate({'top':'0px'},120); //下滑至显示 
}, function() { 
// 鼠标移出时候被触发的函数 
$(".out",this).stop().animate({'top':'0px'},250); //上滑至显示 
$(".over",this).stop().animate({'top':'-45px'},250);//上滑至隐藏 
$(".bg",this).stop().animate({'top':'-45px'},120);//上滑至隐藏 
});

总结

以上讲解了如何一步步打造jQuery动态下滑菜单,您可以按部就班自己实现一个,也可以下载源代码修改定制,当然,您有什么好的提议或者有什么问题,都可以给我留言。

 查看最终效果

 jOuery 动态下滑菜单打包下载

PS:本文由维奇总结

Javascript 相关文章推荐
用javascript实现无刷新更新数据的详细步骤 asp
Dec 26 Javascript
angularJS中router的使用指南
Feb 09 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
Aug 25 Javascript
AngularJs html compiler详解及示例代码
Sep 01 Javascript
js实现弹窗居中的简单实例
Oct 09 Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
Jan 04 Javascript
jquery操作select取值赋值与设置选中实例
Feb 28 Javascript
pace.js和NProgress.js两个加载进度插件的一点小总结
Jan 31 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
Dec 11 Javascript
使用JS判断页面是首次被加载还是刷新
May 26 Javascript
html中创建并调用vue组件的几种方法汇总
Nov 17 Javascript
JavaScript实现优先级队列
Dec 06 Javascript
xheditor与validate插件冲突的解决方案
Apr 15 #Javascript
js 获取Listbox选择的值的代码
Apr 15 #Javascript
JavaScript toFixed() 方法
Apr 15 #Javascript
js function定义函数使用心得
Apr 15 #Javascript
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
Apr 15 #Javascript
关于文本框的一些限制控制总结~~
Apr 15 #Javascript
JS input文本框禁用右键和复制粘贴功能的代码
Apr 15 #Javascript
You might like
destoon设置自定义搜索的方法
2014/06/21 PHP
Yii2 rbac权限控制操作步骤实例教程
2016/04/29 PHP
PHP中include和require的区别实例分析
2017/05/07 PHP
jquery控制listbox中项的移动并排序的实现代码
2010/09/28 Javascript
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
JavaScript高级程序设计(第3版)学习笔记 概述
2012/10/11 Javascript
javascript中数组的多种定义方法和常用函数简介
2014/05/09 Javascript
Underscore.js 1.3.3 中文注释翻译说明
2015/06/25 Javascript
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
微信小程序地图绘制线段并且测量(实例代码)
2020/01/02 Javascript
React.js组件实现拖拽排序组件功能过程解析
2020/04/27 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
2020/11/16 Javascript
python的即时标记项目练习笔记
2014/09/18 Python
python 第三方库的安装及pip的使用详解
2017/05/11 Python
pandas pivot_table() 按日期分多列数据的方法
2018/11/16 Python
python 实现多维数组(array)排序
2020/02/28 Python
CSS3中动画属性transform、transition和animation属性的区别
2016/09/25 HTML / CSS
日本最大的药妆连锁店:Matsukiyo松本清药妆店
2017/11/23 全球购物
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
精油和天然健康美容产品:Art Naturals
2018/01/27 全球购物
判断单链表中是否存在环
2012/07/16 面试题
酒店总经理欢迎词
2014/01/08 职场文书
奥巴马连任演讲稿
2014/05/15 职场文书
师德师风个人自我剖析材料
2014/09/27 职场文书
社区母亲节活动总结
2015/02/10 职场文书
联欢会开场白
2015/06/01 职场文书
公司酒会主持词
2015/07/02 职场文书
运动会通讯稿200字
2015/07/20 职场文书
2015年政教主任工作总结
2015/07/23 职场文书
优秀团员主要事迹范文
2015/11/05 职场文书
创业计划书之面包店
2019/09/17 职场文书
python爬虫框架feapde的使用简介
2021/04/20 Python
pytorch MSELoss计算平均的实现方法
2021/05/12 Python
浅谈Python类的单继承相关知识
2021/05/12 Python