Tagged under: , , ,

[Blogger] 利用 jQuery 來製作 Tab 選單 (參考自男丁格爾)

image

參考自男丁格爾大大的文章:http://abgne.tw/jquery/apply-jquery/jquery-web-tabs.html

男丁格爾大大的教學寫得十分詳盡,也可以至男丁格爾大大的文章去看看囉。

我是把這個東西放在一個在 Blog 文章底下另外加上的 section,必須進入文章 (Pagetype = item) 才會顯示 (利用 <b:if> ),然後讓裡頭的 widget 利用 jQuery,使得整個版面不會一直拉長,並且提供 TAB 頁籤來做切換。

底下簡單說明一下我的作法

首先是 CSS,略作修改,其中,div#main2 即是用來賦予 <b:section id=’main2’> 樣式的。

<style type='text/css'>
ul.tabs {
    margin: 0;
    padding: 0;
    list-style: none;
    width: 100%;
    height: 22px;
    border-bottom: solid 1px #999;
    border-left: solid 1px #999;
}
ul.tabs li {
    float: left;
    height: 21px;
    line-height: 21px;
    overflow: hidden;
    position: relative;
    margin-bottom: -1px;    /* 讓 li 往下移來遮住 ul 的部份 border-bottom */
    border: solid 1px #999;
    border-left: none;
    background: #e1e1e1;
}
ul.tabs li a {
    display: block;
    padding: 0 20px;
    color: #000;
    border: solid 1px #fff;
    text-decoration: none;
}
ul.tabs li a:hover {
    background: #FEFEFE;
}
ul.tabs li.active  {
    background: #fff;
    border-bottom: solid 1px #fff;
    border-top: solid 3px red;
    height: 19px;
}
ul.tabs li.active a:hover {
    background: #fff;
}
div#main2 {
        border-right: 1px solid #999;
        border-bottom: 1px solid #999;
        border-left: 1px solid #999;
        padding: 1em 1em 0 1em;
}
</style>

再來就是選單區,其中 href=’#HTML6’ 就是要指到底下的 <b:widget id=’HTML6’>,以此類推。

<ul class='tabs'>
    <li><a href='#HTML6'>相關文章</a></li>
    <li><a href='#HTML5'>熱門點閱</a></li>
    <li><a href='#HTML11'>Pushba! 推推</a></li>
    <li><a href='#HTML7'>推薦閱讀</a></li>
    <li><a href='#HTML31'>噗噗浪</a></li>
    <li><a href='#HTML32'>臉書聊聊</a></li>
</ul>

底下這塊很熟悉吧,這個就是像你的側邊欄會一塊一塊的東西,所以你也可以試著在原來的側邊欄下方另外再切一個側邊欄,然後把這個新的側邊欄改成 TAB 頁籤顯示的方式,點選頁籤之後切換 widget 就不會讓側邊欄一直變長啦。

<b:section class='main' id='main2' showaddelement='yes'>
<b:widget id='HTML6' locked='false' title='' type='HTML'/>
<b:widget id='HTML11' locked='false' title='' type='HTML'/>
<b:widget id='HTML5' locked='false' title='' type='HTML'/>
<b:widget id='HTML7' locked='false' title='' type='HTML'/>
<b:widget id='HTML31' locked='false' title='' type='HTML'/>
<b:widget id='HTML32' locked='false' title=’' type='HTML'/>
</b:section>

最後,再把 jQuery 程式加上去就搞定了,針對 id 為 main2 的 section,底下的 .widget 做 hide 的動作。(ps. 文字說明都是男丁大大寫的,很容易懂)

<script language='JavaScript' type='text/javascript'>
$(function() {
     // 預設顯示第一個 Tab
    var_showTab = 0; 

     $('ul.tabs li').eq(_showTab).addClass('active'); 
     $('#main2 > .widget').hide().eq(_showTab).show();

     // 當 li 頁籤被點擊時...
     // 若要改成滑鼠移到 li 頁籤就切換時, 把 click 改成 mouseover 
     $('ul.tabs li').click(function() {
          // 找出 li 中的超連結 href(#id)
          var $this = $(this), _clickTab = $this.find('a').attr('href');

          // 把目前點擊到的 li 頁籤加上 .active
          // 並把兄弟元素中有 .active 的都移除 class
          $this.addClass('active').siblings('.active').removeClass('active'); 

          // 淡入相對應的內容並隱藏兄弟元素
          $(_clickTab).stop(false, true).fadeIn().siblings().hide();

          return false;
      }).find('a').focus(function(){
          this.blur();
      });
});
</script>

裝好的成果如每篇文章頁面底下所示。

2 回應:

  1. Hello,
    Excellent script and very nice I'm already using it, but ..
    how to make like this table

    " * 好格輪播
    * 近期文章
    * 近期回應
    "

    thank you for it.

    回覆刪除

回應不用錢,請多多益善!懶得寫字按個讚也是相當感謝!