ing

用 jQuery 实现灵活的 tab 切换效果

09-10-25 @ other /

Tab 切换效果现在网上到处都是,特别是一些大型的门户,为了在有限的空间内呈现更多的内容,往往都采取了这种方式。腾讯的迷你首页就非常的典型。我以前用的 wordpresss 皮肤 iNove 中,其实也有这样的效果,就在 Trackbacks 和 Comments 的切换处,就是一个简单的应用。

给自己的博客搞了个,是用的 jQuery 实现的,实现的代码是从网上收集来的,自己感觉是非常不错的代码,非常简单,但不失灵活,而且很好的做到了表现和行为的分离。现在就跟大家分享一下,建议已经引入 jQuery 框架的同志们使用,如果因为这么几行代码而专门引入 jQuery ,感觉有点太夸张了,其实这样的 JS 代码网上多的是,随便 google 一下就 N 多了!!

实现思路

大家看源代码就应该能看到了,我这里三部分内容其实在页面加载的时候都加载了,只是只显示了一块,另外的两块隐藏。然后用 JS 和 CSS 来对鼠标动作进行响应,来达到所想来的效果。这个是 tab 切换效果的基本思路。当然同一些大型门户不同,他们的 tab 都实现了异步传输,即在页面加载的时候并不会加载,而是在需要的时候才从服务器进行传输并显示,这样在技术上显然会比较复杂,对于小网站来说,的确没多少 必要!!

具体代码

这里只展示下我用到的代码并进行一些解释,大家可根据实现情况进行修改。

首先看 HTML

<div class="tab">
<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 PostsWP-PostViews Plus 来调用相关文章和热门文章的。于是,我是代码是这样的:

<div class="entry-foot">
<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{background-color:#FAFAFA;margin:5px 8px;padding:5px 10px;}
.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 代码

$(document).ready(function(){
$
(".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(渐显)
});});


或者通过RSS关注本站的更新 ^ O ^ 。” — by edikud @ 09-10-25 - 13:35。

转载请注明:来自eDIKUD'S Blog

Tag(s): tab  
  • QQ书签
  • Del.icio.us
  • 百度收藏
  • Google
  • 饭否
  • FriendFeed
点击查看》》 暧昧文章 / 相关文章 / 热评文章

0 Comments Contributed by Visitors
Leave Comments Here...

:) lol 8) :-o evil :( wink :-| :-x twisted 8-O :-P oops idea :-D cry :-? ?

(required)

(required)

随您

(Ctrl+Enter)

Please calculate 1+6

  • 本站不会泄露您的邮件地址,敬请放心.
  • 支持常用 HTML 代码调用.
  • 仅当某人针对您的评论做出回应时,您才会收到由本站发出的通知信件.
  • 如您希望以相同方式通知某位网友,请点击 Reply 按钮,或自行输入@对方名字.
  • 允许在评论中贴的代码如下:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> .
  • 鼠标移植评论中的 @someone 区域即可自动显示 someone 的评论内容.