Tab 切换效果现在网上到处都是,特别是一些大型的门户,为了在有限的空间内呈现更多的内容,往往都采取了这种方式。腾讯的迷你首页就非常的典型。我以前用的 wordpresss 皮肤 iNove 中,其实也有这样的效果,就在 Trackbacks 和 Comments 的切换处,就是一个简单的应用。
寒假期间也给自己的博客搞了个,是用的 jQuery 实现的,实现的代码是从网上收集来的,自己感觉是非常不错的代码,非常简单,但不失灵活,而且很好的做到了表现和行为的分离。现在就跟大家分享一下,建议已经引入 jQuery 框架的同志们使用,如果因为这么几行代码而专门引入 jQuery ,感觉有点太夸张了,其实这样的 JS 代码网上多的是,随便 google 一下就 N 多了!!
效果预览

实例见文章的结尾处相关文章的部分。
实现思路
大家看源代码就应该能看到了,我这里三部分内容其实在页面加载的时候都加载了,只是只显示了一块,另外的两块隐藏。然后用 JS 和 CSS 来对鼠标动作进行响应,来达到所想来的效果。这个是 tab 切换效果的基本思路。当然同一些大型门户不同,他们的 tab 都实现了异步传输,即在页面加载的时候并不会加载,而是在需要的时候才从服务器进行传输并显示,这样在技术上显然会比较复杂,对于小网站来说,的确没多少必要!!
具体代码
这里只展示下我用到的代码并进行一些解释,大家可根据实现情况进行修改。
首先看 HTML
<p>
<span id="tab1">tab1</span>
<span id="tab2">tab2</span>
<span id="tab3">tab3</span></p>
<ul class="tab1">以 LI 形式呈现的 tab1 的内容</ul>
<ul class="tab2">以 LI 形式呈现的 tab2 的内容</ul>
<ul class="tab3">以 LI 形式呈现的 tab3 的内容</ul>
</div>
看下其实挺简单,一个 P 里三个 span ,然后对应三个 ul 列表,只需要对应的 span 的 ID 和 ul 的 class 一致就可以了。至于 ul 中的内容,就因人而异了!!
我这里是用了两个插件:WordPress Related Posts 和 WP-PostViews Plus 来调用相关文章和热门文章的。于是,我是代码是这样的:
<p>
<span id="related_post">相关文章</span>
<span id="mhot">本月热门</span>
<span id="allhot">点击排行</span></p>
<?php wp23_related_posts();?>
<ul class="mhot"><?php get_timespan_most_viewed('post', 5, 30, true, true, 0)?></ul>
<ul class="allhot"><?php get_most_viewed('post', 5, 30, true, true, 0)?></ul>
</div>
CSS代码
.entry-foot p span{background-color:#EFEFEF;border:1px solid
#CCCCCC;cursor:pointer;margin-right:6px;padding:2px 5px;}
.entry-foot p span.current{background-color:#FAFAFA; border-bottom-color:#fafafa;}
.entry-foot p{border-bottom:1px solid #CCCCCC;font-weight:bold;padding:0 10px 2px;}
.entry-foot li{border-bottom:1px dotted #CCCCCC;padding-bottom:3px;margin:5px 0;}
.entry-foot .mhot,.entry-foot.allhot{display:none;}
样式大家可以自己去设置,其中 .current 的样式就是鼠标移主去时 span 的样式了!
jQuery 代码
$(".entry-foot span:first").addClass("current"); //为第一个span添加 .current 的样式,默认选中
$(".entry-foot ul:not(:first)").hide(); //ul 不是第一个时隐藏
$(".entry-foot span").mouseover(function(){ //鼠标移到 span 上时触发函数
$(".entry-foot span").removeClass("current"); //为第一个 span 移除 .current 样式
$(this).addClass("current"); //为触发的 span 添加样式
$(".entry-foot ul").hide(); //隐藏 ul
$("."+$(this).attr("id")).fadeIn("slow"); //这句是核心,class(.) 和触发 span 的ID 一致的 fadeIn(渐显)
});});
完了,怎么样,应该挺容易理解的吧!本文只是提供一个思路或是方法,具体的代码大家可以根据自己的实际情况来写。有问题请留言,我会尽量答复。


















效果不错……
终于知道你这里是这样做出来的。。。
你这个疯子!
真的很不错。
不错不错,好玩好玩。我慢慢消化……
你博客的人气越来越旺!
自己留一个言去睡觉了,明天还有很多事要做呢!!
谢谢你的教程,我成功实现了,但是在ie7下面我的tab字体看起来发虚,请问这是什么原因呢?
@kerby 不客气!发虚?我看了下,在我这IE7 下看着挺正常的啊!不知道你那是什么样子的!!
坐下来慢慢研究
@xiaorsz
你那里没有问题?我这里看着不清楚,不过在其它浏览器就没问题,而且用ie7看你的tab也很清楚,可能这个跟主题有关了
@kerby 是啊,我这里用 IE 看着也可以啊!!这就诡异了,呵呵 !!
@johnzon 好久没见你影子了哈!!应该回学校了吧?
赶紧写点别的 把最近解决的jquery的都写上
完善一下@预览的教程吧,那个只能在inove主题下才能用,换了其他的就不行了,如何才能通用呢?
xiaorsz,我来定制jquery教程了^_^
@kerby 那个不一定在 iNove 下才能用啊!!只要回复是 @name 的都可以实现的,和 iNove 其实没什么关系的!!不知道你用在哪里不行了?
我最近也在折腾 jQuery 呢!!发现它太强大了!!呵呵!!
@xiaorsz
不是吧,你的@预览方法是在这里看的吗?http://philna.com/2008/12/mouseover-to-show-comment-no/
代码是一模一样的嘛??
肖恩不是都说过这个要根据主题不同而做修改的吗??
@kerby 基本上是一样的,修改也是针对自己的主题把那个 ID 和 class 换一下!!就是用正则表达式匹配 @name 然后再克隆显示了,能看懂再用的话就会很简单了!!你可以先试一下哈!!
效果真不错
提交评论之后,是怎么实现的这种渐变滑动的效果呢?
@kerby 博主的也发虚,有可能ie hack定义的字体不同导致的吧。还得作者解释一下
我用的Inove的主题
我的问题处在了这:
$(“.entry-foot span:first”) is null //firebug如是说
于是我将$(“.entry-foot span:first”)改为和CSS里一样的$(“.entry-foot p span:first”)了,可是结果还是令人心痛:
$(“.entry-foot p span:first”) is null
jquery正常载入,剩下的代码完全copy你的,不知道为什么会出这个问题,这个选择器里应如何填才能正确显示呢?
谢谢你的提示哦·`·“~
@痞子C 这个选择器选择的就是 entry-foot 类中的第一个 span 啊!!能在对应的 html 中能找到就应该存在啊?不知道你是想在哪里实现的,我去看看什么情况!!
@痞子C 你的下面也发虚吗?
额,学习了, 以前用js都不会哦,还得学习学习
仔细想下你的研究撒··~~`~
这个东西很有用。学习了。
说的很仔细呀!谢谢了!
有时间要弄一下
我没有用到wordpress,而是直接用HTML标签,但按照上面做出来并不完全成功
请教一下,jQuery 代码放在哪里,怎么处理?
不懂这个,谢谢了。
@xhs 这个应该是一样的呀,这里只是动态调用内容罢了!!呵呵!!
@ChenShiAn 放到一个JS文件中,然后在页面中引用就行了!!还要引入 jQuery 框架!!可以到网上多搜索下,呵呵!!
学习了,将来有用。
学习了,将来有用。
很不错,谢谢
试了一下,如果每个ul都是display:none那么最开始第一个ul不自己显示,当鼠标移上才显示。而且移开容易自己变没,我给改成click触发的了。
第一个不显示给第一个ul加fadeIn也行,CSS里把第一个类从display:none里删了也行。
很好很强大
嘿嘿。。支持一个!
你张于又更新了,哈
我也看了些jq,但是看得懂代码,写不出,实战少了啊……
你的代码高亮是怎么实现的,挺漂亮的代码配色
囧,没看时间,我还以为你更新了……这么老的文章怎么突然出现在了阅读器里面呢?
哇塞~真的很感谢呢~~~
这个好使~
[...] 干掉侧边栏 jQuery练手作品:Tab 切换效果 啥是“Tab 切换效果”,这都不知道那肯定落伍了!其实实现这个有很多方法,随手一搜就是一大把。不过,既然已经加载了jQuery,那就物尽其用,参考了这篇文章《用 jQuery 实现灵活的 tab 切换效果》,也给小站整了个(见侧边栏)。 [...]
[...] 啥是“Tab 切换效果”,这都不知道那肯定落伍了!其实实现这个有很多方法,随手一搜就是一大把。不过,既然已经加载了jQuery,那就物尽其用,参考了这篇文章《用 jQuery 实现灵活的 tab 切换效果》。 [...]
[...] 1 views 啥是“Tab 切换效果”,这都不知道那肯定落伍了!其实实现这个有很多方法,随手一搜就是一大把。不过,既然已经加载了jQuery,那就物尽其用,参考了这篇文章《用 jQuery 实现灵活的 tab 切换效果》,也给小站整了个(见侧边栏)。 [...]