jquery

jQuery制作淡入淡出的网站导航栏

前些天有朋友问我关于如何用jQuery制作淡入淡出的效果,就像本网上方的导航栏一样的效果.
借助jQuery的帮助,我们只需要几行代码就可以实现这样的效果.
当然这样的效果不止可以用来制作网站导航栏,同时也可以用来用在其他有鼠标悬停的地方.这就需要发挥各位的想象力了.

在线DEMO
下载源文件

XHTML的代码

首先,我们需要在之间把jQuery引用进来,这里我们使用Google CDN提供的jQuery.



<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js" type="text/javascript"></script>

首先让我们看看本例子中用做导航栏的背景图片
nav jQuery制作淡入淡出的网站导航栏
每个按钮的尺寸都是一样大:125*52px.
jfm jQuery制作淡入淡出的网站导航栏
接下来我们要看看导航栏的代码,这里我使用ul来进行布局(较常用的方法),代码如下:


<ul class="nav">
	<li class="home"><a href="#">主页</a></li>
	<li class="work"><a href="#">作品</a></li>
	<li class="about"><a href="#">关于</a></li>
	<li class="contact"><a href="#">联系</a></li>
</ul>

各位可以看到每个li中还包含了

这样的空div,而这个空div就是本例子中用于鼠标悬停时显示的div.在后面我们可以看到它的作用.继续..

CSS的代码


ul.nav{
	height:52px;
	text-indent:-9999px;
	list-style:none;
	}

这里text-indent:-9999px;是把xhtml里的文字缩进到我们看不到的地方.


ul.nav li{
	float:left;
	position:relative;
	}

注意这里position:relative;的设置是为了hoverHome等层进行相对定位做准备.


ul.nav a{
	display:block;
	width:125px;
	height:52px;
	}

这里把宽度与高度设置为按钮的尺寸,即125*52px.


.hoverHome,.hoverWork,.hoverAbout,.hoverContact{
	position:absolute;
	top:0;
	left:0;
	width:125px;
	height:52px;
	cursor:pointer;
	}

CSS部分的重点就在这,使用position:absolute;后这4个层就会以ul.nav li为基点进行定位,这里我们需要让.hoverHome,.hoverWork,.hoverAbout,.hoverContact这4个div与每个li完全重叠,所以我们设置top与left都为0.
接下来我们定义导航栏的背景图片


.home a{
	background:url(images/nav.gif) no-repeat 0 0;
	}
.work a{
	background:url(images/nav.gif) no-repeat -125px 0;
	}
.about a{
	background:url(images/nav.gif) no-repeat -250px 0;
	}
.contact a{
	background:url(images/nav.gif) no-repeat -375px 0;
	}

我们会特别注意到背景图片的偏移位置.例如“home”的背景图片在距离左边0px,距离上边0. 而第2个按钮”work”距离左边125px,所以我们设置为-125px(记住是负号).距离上边为0;以此类推.


.hoverHome{
	background:url(images/nav.gif) no-repeat 0 -52px;
	}
.hoverWork{
	background:url(images/nav.gif) no-repeat -125px -52px;
	}
.hoverAbout{
	background:url(images/nav.gif) no-repeat -250px -52px;
	}
.hoverContact{
	background:url(images/nav.gif) no-repeat -375px -52px;
	}

这里我们依然用的是同一张背景图片,而我们这一次需要的是图片下方蓝色的部分,也就是距离上边52px的线以下的部分.所以我们看到每个层的背景图偏移位置第2个属性都是-52px,这就让背景图从距上边52px的地方开始.

现在刷新你的页面,如果你的代码没错,你应该可以看到一条蓝色的导航栏了.但是它没有任何鼠标悬停的变动效果.没有淡入淡出,轮到jQuery出场了.

jQuery代码

请依然把代码写在<head>里面.


<script type="text/javascript">
$(document).ready(function(){
		$(".hoverHome,.hoverWork,.hoverAbout,.hoverContact").css("opacity","0");
		$(".hoverHome,.hoverWork,.hoverAbout,.hoverContact").hover(function () {
			$(this).stop().animate({
				opacity: 1
			}, "slow");
		},
		function () {
			$(this).stop().animate({
				opacity: 0
			}, "slow");
		});
		});
</script>

这段代码很容易理解,首先把.hoverHome,.hoverWork,.hoverAbout,.hoverContact这4个层设置透明度opacity为0,即隐藏.接着当鼠标悬停在按钮上时,我们再将这4个层以淡入的效果显示出来,而当把鼠标移开时,这4个层就淡出.

总结一下

这个例子中的代码都很好理解,其核心就是利用jQuery中的animate()函数以淡入淡出的效果改变div的css属性.参考jQuery API关于animate的使用方法.而CSS最需要留意的就是position:relative与Position:absolute的位置.
好吧,对于jQuery与Javascript这方面我也是一个小小的菜鸟,经常都是看看别人的代码然后自己胡乱写,所以如果你有更好的方法,请你留言给我,同时也帮助其他看到这篇文章的朋友呵呵.谢谢

最后呼吁一下转载的朋友,请尊重本人的劳动成果,留一个小小的链接给我.谢谢!

people also love:

  1. 提升密码输入框易用性,2个jQuery插件

18 Comments:

  1. Leeiio says:

    对于图片类的导航是不错的,如果是图片加文字似乎那一层渐隐的就覆盖文字了。T_T

    • eddie says:

      你说的没错,提了我一个醒.不过如果是用文字来做的导航.用背景颜色的渐变应该比较常见.就像css-tricks.com那个效果一样

  2. wlsy says:

    呵呵,这样会多了个空层,这种方法我个人感觉还不是很好。

  3. GadenStar says:

    呵呵。. 是个很不错的技巧.

  4. bolo says:

    不错不错,正想改改导航栏

  5. bolo says:

    这似乎不是一个很好的方法

  6. uecss says:

    赞一个
    不过,没看到 li 里的div 呀,demo OK

  7. [...] jQuery制作淡入淡出的网站导航栏 | eddie.Yang's creative http://www.ediyang.com/jquery-fade-in-and-out-menu – view page – cached 前些天有朋友问我关于如何用jQuery制作淡入淡出的效果,就像本网上方的导航栏一样的效果. 借助jQuery的帮助,我们只需要几行代码就可以实现这样的效果. 当然这样的效果不止可以用来制作网站导航栏,同时也可以用来用在其他有鼠标悬停的地方.这就需要发挥各位的想象力了. , 前些天有朋友问我关于如何用jQuery制作淡入淡出的效果,就像本网上方的导航栏一样的效果. 借助jQuery的帮助,我们只需要几行代码就可以实现这样的效果. 当然这样的效果不止可以用来制作网站导航栏,同时也可以用来用在其他有鼠标悬停的地方.这就需要发挥各位的想象力了. — From the page [...]

  8. yimu says:

    很不错!刚接触jQuery!受益了!

  9. 我也是没看到里面的空白div呢…

  10. gaoav says:

    既然进来了,就留个脚印

  11. oscoder says:

    好文!

  12. 今天是圣诞节啊,祝大家节日快乐。呵呵

  13. C.C says:

    很不错啊,之前有个同学一直跟我说JQ多神奇,可惜我不懂这些,继续努力吧

  14. 阿拉和狗 says:

    博主你好,我用了你的这个技术,但是发现没法添加链接给图片,或者说添加后点击无效,不知是怎么回事,我修改了你的代码发现也是链接无效的样子,能不能告诉下怎么弄?

  15. 阿拉和狗 says:

    明白了…把中的加到后面就好了

Leave a Reply

Back To top