0
1

More than 3 years have passed since last update.

jQueryで複数のスライドダウンコンテンツを実装する

Posted at

スライドで表示するコンテンツが1つの場合は単純ですが、複数ある場合と閉じるボタンがある場合という条件があるスライドコンテンツの実装方法です。

デモ

デモ

HTML

index.html
<ul class="slideContent">
  <li>
    <h2>見出しテキスト1</h2>
      <div class="inner">
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam, quis, repudiandae neque incidunt quasi cumque quia id laudantium aspernatur impedit accusantium amet atque soluta tempore ex sequi pariatur blanditiis magnam.</p>
        <p class="close">閉じる</p>
      </div>
  </li>
  <li>
    <h2>見出しテキスト2</h2>
      <div class="inner">
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam, quis, repudiandae neque incidunt quasi cumque quia id laudantium aspernatur impedit accusantium amet atque soluta tempore ex sequi pariatur blanditiis magnam.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam, quis, repudiandae neque incidunt quasi cumque quia id laudantium aspernatur impedit accusantium amet atque soluta tempore ex sequi pariatur blanditiis magnam.</p>
        <p class="close">閉じる</p>
      </div>
  </li>
~~中略~~
</ul>

CSS

CSSは見た目の調整以外では、最初にコンテンツを非表示にしておくために以下の指定をします。

style.css
.inner {
  display: none;
}

JavaScript

script.js
$(function(){
  if($('.slideContent').size() > 0){
    //コンテンツの数
    var slideContentNum = $('.slideContent li').length;
    //コンテンツ分のフラグ
    var navFlag = new Array();
    for( i = 0 ; i < slideContentNum ; i++ ){
      navFlag[i] = true;
    };
    //クリックした時の処理
    $('.slideContent h2').click(function(){
      //何個目のものがクリックされたかを確認
      var clickNum = $(this).parent().index();
      //フラグがtrueだったら
      if(navFlag[clickNum]){
        $(this).next('.inner').slideDown();
        $(this).addClass('current');
        navFlag[clickNum] = false;
      }
      else{
        $(this).next('.inner').slideUp();
        $(this).removeClass('current');
        navFlag[clickNum] = true;
      }
    });

    //閉じるをクリックした時の処理
    $('.slideContent .close').click(function(){
      var closeNum = ($(this).parents('li').index());
      $(this).parents('.inner').slideUp('fast');
      $(this).parents('.inner').prev('h2').removeClass('current');
      navFlag[closeNum] = true;
    });
  }
});

親のliが何番目のものかでフラグの番号をつけて開け締めをしています。

よく忘れるのがコンテンツ分のフラグを作るところで、これが一個だけだと1番目押して開いた後に続けて2番目が開かないとか 2回クリックしないと動かないなどの現象が起きます。

この記事の転載元

複数のスライドダウンコンテンツを実装するjQuery

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1