Blog

アコーディオンを横向きに開閉する

2012.11.07Cat:jQuery プログラマー

jQueryでアコーディオンを横向きに開閉する。

HTMLを用意する

<div>
 <dl>
  <dt id=”step1″><span>Step.1</span></dt>
  <dd><p>Lorem ipsum (中略) venenatis.</p></dd>
  <dt id=”step2″><span>Step.2</span></dt>
  <dd><p>Lorem ipsum (中略) venenatis.</p></dd>
  <dt id=”step3″><span>Step.3</span></dt>
  <dd><p>Lorem ipsum (中略) venenatis.</p></dd>
 </dl>
</div>

 

CSSを用意する

body{
background:#252422;
}
div{
width:800px;
height:300px;
margin:50px auto;
overflow:hidden;
}
dl{
width:900px;
height:300px;
}
dt{
width:35px;
height:300px;
float:left;
}
dt span{
display:block;
width:100%;
height:100%;
text-indent:-9999px;
}
dt span.over{
cursor:pointer;
}
dt span.selected{
cursor:default;
}
dt#step1 span{
background:url(“images/background-1.jpg”);
}
dt#step1 span.over{
background:url(“images/background-1-over.jpg”);
}
dt#step1 span.selected{
background:url(“images/background-1-selected.jpg”);
}
dt#step2 span{
background:url(“images/background-2.jpg”);
}
dt#step2 span.over{
background:url(“images/background-2-over.jpg”);
}
dt#step2 span.selected{
background:url(“images/background-2-selected.jpg”);
}
dt#step3 span{
background:url(“images/background-3.jpg”);
}
dt#step3 span.over{
background:url(“images/background-3-over.jpg”);
}
dt#step3 span.selected{
background:url(“images/background-3-selected.jpg”);
}
dd{
margin:0;
width:695px;
height:300px;
float:left;
background:#D4D0C8;
overflow:hidden;
}
dd p{
width:655px;
text-indent:1em;
padding:20px;
}

 

jQueryを用意する

$(function(){
        $(“dd:not(:first)”).css(“width”,”0px”);
        $(“dt:first span”).addClass(“selected”);
        $(“dl dt”).click(function(){
                 if($(“+dd”,this).css(“width”)==”0px”){
                 $(“dt:has(.selected) +dd”).animate({“width”:”0px”});
                 $(“+dd”,this).animate({“width”:”695px”});
                 $(“dt span”).removeClass(“selected”);
                 $(“span”,this).addClass(“selected”);
                 }
         }).mouseover(function(){
          $(“span”,this).addClass(“over”);
         }).mouseout(function(){
          $(“span”,this).removeClass(“over”);
         });
});
DEMOはコチラ

「説明」

①  $(“dd:not(:first)”).css(“width”,”0px”);

初期状表示態の設定では、1番目の以外のパネル(dd要素)のwidthを0pxに変更します。

② $(“dt:first span”).addClass(“selected”);

1番目のdt要素に対してclass属性「selected」を追加し、展開中のラベルスタイルに

設定します。

③ if($(“+dd”,this).css(“width”)==”0px”){

if分で、クリックされたラベルに対応するパネル(dd要素)の横幅が0の場合の処理を

記述します。

④  $(“dt:has(.selected) +dd”).animate({“width”:”0px”});

ラベルがクリックされたら、class属性が「selected」の要素を含むdt要素の次に登場する

dd要素の幅(width)を0に変更します。幅の変更には、任意のCSSプロパティの値を
アニメーション付きで変化させるanimate()を使います。これで展開中のパネルが閉じます。

⑤  $(“+dd”,this).animate({“width”:”695px”});

同様に、クリックされた要素の次に登場するdd要素の幅(width)をanimate()で695pxに変更します。

これで、クリックされたラベルに対応するパネルが開きます。

⑥   $(“dt span”).removeClass(“selected”);
$(“span”,this).addClass(“selected”);

クリックされたラベルを選択状態にするため、すべてのspan要素からclass属性「selected」

を取り除き、クリックされたdt要素内のspan要素にclass属性「selected」を再設定します。

⑦ }).mouseover(function(){
$(“span”,this).addClass(“over”);
}).mouseout(function(){
$(“span”,this).removeClass(“over”);
});

最後にmouseover/mouseoutイベントでロールオーバーの処理を設定したら完成です。

Author Profile

poe

本心でやれば、できないことはない!。。。。。。

» 投稿一覧
  • Launch Cart次世代ECサイト構築システム 初期月額無料
  • LaunchMovie ECに特化した動画制作サービス

Archive

ページTOPへ