お寿司か焼き肉食べたい

まじめな事からしょーもない事まで
めにゅーを開く(投げやり)

切り換えたら出してやるから座ってろ

タブで画面を切り替える、よくあるヤツですね。
今回はソレです。

今回の内容

  • ・タブ切替の実装

タブ切替といっても大した事はしていません。
htmlの構造としては
1:タブ部分
2:コンテンツ表示部分
の2つが基本的には存在しています。
IDやclassで指定しても良いですし、要素の順番で切り替えてもいい。その辺はお好みで。

タブ切替(要素の順番で切り替え)

html構造の例

<ul id="tabCtrl">
  <li>タブ1</li>
  <li>タブ2</li>
  <li>タブ3</li>
</ul>
<div id="tabContents">
  <div>タブ1の内容</div>
  <div>タブ2の内容</div>
  <div>タブ3の内容</div>
</div>

処理

var prevLiNum = 0, // 前回のタブ番号、初期値は0
nowLiNum  = 0; // 今回のタブ番号、初期値は0

//**************************************
// タブ部分のコントロール処理
//**************************************
$('#tabCtrl').children('li').on('click',function()
{
  // クリックされたliは何番目なのかを取得
  nowLiNum = $(this).index();

  // 前回分と同じ所をクリックしている場合は処理の終了
  if(nowLiNum == prevLiNum) return false;

  // 前回分を非表示にする
  $('#tabCtrl').children('li').eq(prevLiNum).removeClass('on');
  $('#tabContents').children('div').eq(prevLiNum).hide();

  // 今回分を表示する
  $('#tabCtrl').children('li').eq(nowLiNum).addClass('on');
  $('#tabContents').children('div').eq(nowLiNum).show();

  // 今回分を次回用に前回分として保持
  prevLiNum = nowLiNum;

  return false;
});

実際に組んでみた。

  • うーちゃん!
  • うーちゃん?
  • うーちゃんっ
ワシが卯月だ
撃て。貴様のような若造にワシの主砲が避けられるとでも
思っておるのか!
うち、卯月どす
あんさん、うちの主砲避けられるとでも思うてはるん?
大概にしなはれ。ナメとったらあきまへんで!
卯月や!
ホンマあんたにはガッカリやわぁ~
まだまだ青臭い考えは捨てれんか?
あ、アメちゃん食べるか?

結構シンプルですね。
順番のタブ切替はこんな感じ。

タブ切替(class名で判別して切替)

html構造の例

<ul id="tabCtrl">
  <li class="tab1">タブ1</li>
  <li class="tab2">タブ2</li>
  <li class="tab3">タブ3</li>
</ul>
<div id="tabContents">
  <div class="tab1Main">タブ1の内容</div>
  <div class="tab2Main">タブ2の内容</div>
  <div class="tab3Main">タブ3の内容</div>
</div>

処理

var prevLiClass = 'tab1', // 前回のタブクラス名、初期値はtab1
nowLiClass  = 'tab1'; // 今回のタブ番号、初期値はtab1

//**************************************
// タブ部分のコントロール処理
//**************************************
$('#tabCtrl').children('li').on('click',function()
{
  // クリックされたliのクラス名を取得
  nowLiClass = $(this).attr('class');

  // もし、liに他のクラスが付いている場合はここで余分なクラス名を削除
  // nowLiClass = nowLiClass.replace('【除外するクラス名】',''); // みたいな感じ

  // 前回分と同じ所をクリックしている場合は処理の終了
  if(nowLiClass == prevLiClass) return false;

  // 前回分を非表示にする
  $('.'+prevLiClass).removeClass('on');
  $('.'+prevLiClass+'Main').hide();

  // 今回分を表示する
  $('.'+nowLiClass).addClass('on');
  $('.'+nowLiClass+'Main').show();

  // 今回分を次回用に前回分として保持
  prevLiClass = nowLiClass;

  return false;
});

サンプルにはしませんが、class指定の場合は上記のような形になります。
今回はパッパッと切り替わっていましたが、切り替える手法を変更する事で
また違った印象も出せますよね。

タブ切替(スライドして切り替わる系)

というわけで、スライドして切り替わるようにしましょう。
ただ単純にスライドしてくるだけではつまらないので、左右判定して出してくれるようにやってみようと思います。

html構造の例

<ul id="tabCtrl2">
  <li class="tab1">タブ1</li>
  <li class="tab2">タブ2</li>
  <li class="tab3">タブ3</li>
</ul>
<div id="tabContents2">
  <div class="tab1Main">タブ1の内容</div>
  <div class="tab2Main">タブ2の内容</div>
  <div class="tab3Main">タブ3の内容</div>
</div>

処理

var prevLiNum = 0, // 前回のタブ番号、初期値は0
    nowLiNum  = 0, // 今回のタブ番号、初期値は0
    moveFlg   = 0; // アニメーション動作フラグ 0:未動作 1:動作中

//**************************************
// タブ部分のコントロール処理
//**************************************
$('#tabCtrl2').children('li').on('click',function()
{

  // 既に動作中の場合は処理の終了
  if(moveFlg == 1) return false;
  moveFlg = 1;

  // 前回分と同じ所をクリックしている場合は処理の終了
  // 動作中フラグをへし折る
  if($(this).index() == prevLiNum)
  {
    moveFlg = 0;
    return false;
  }

  // クリックされたliは何番目なのかを取得
  nowLiNum = $(this).index();

  // タブ部分の切り替え
  $('#tabCtrl2').children('li').eq(prevLiNum).removeClass('on');
  $('#tabCtrl2').children('li').eq(nowLiNum).addClass('on');

  // 前回分と今回分でどちらが大きい数値なのか
  if(nowLiNum > prevLiNum)
  {
    // クリックしたほうが大きい
    // 右から左へスライド

    $('#tabContents2').children('div').eq(prevLiNum).animate({'left':'-454px'},1000,'',function()
    {
      // スライド完了後に前回分を非表示に、動作フラグをへし折る、前回分ように今回分を入れ込む
      $(this).hide();
      moveFlg = 0;
      prevLiNum = nowLiNum;
    });
    $('#tabContents2').children('div').eq(nowLiNum).show().css('left','454px').animate({'left':'0px'},1000,'');

  }
  else
  {
    // クリックしたほうが小さい
    // 左から右へスライド

    $('#tabContents2').children('div').eq(prevLiNum).animate({'left':'454px'},1000,'',function()
    {
      // スライド完了後に前回分を非表示に、動作フラグをへし折る、前回分ように今回分を入れ込む
      $(this).hide();
      moveFlg = 0;
      prevLiNum = nowLiNum;
    });
    $('#tabContents2').children('div').eq(nowLiNum).show().css('left','-454px').animate({'left':'0px'},1000,'');
  }
  return false;
});
  • ちゃんうー
  • うちゃーん
  • うーさん
しれぇかんの布団にカビ菌ばら撒いといたぴょん。
ついでに湿らせておいたぴょん。
しれぇかんのカレー辛そうぴょん・・・大丈夫ぴょん?
水を焼酎に変えといたぴょん
しれぇかんのお寿司のネタを全部ゴムに変えといたぴょん
しっかり噛んで食べるといいぴょん