###前提・実現したいこと
・Swiperを使用しスライドを導入
・スライドの中にアコーディオンを入れ、タイトルを押すと中身が表示される
・スライドを切り替えた先のアコーディオンは閉じたまま
###発生している問題
・アコーディオンを開いた状態のままスライドさせると、別のタイトル部分のアコーディオンも開いた状態になっている
例:タイトルAを開く→開いたままスライド→タイトルCも開いた状態になっている
実現したいことの上2つはできているのですが、3つ目がスライドの際の挙動をJSで制御すればいける?のかなと思うのですが、詰まってしまいました。
スライドの数はこの先いくつも増える予定のため、タイトル名ごとに別個のアコーディオン用クラス/記述は作りたくないのですが、それ以外に閉じた状態にさせる方法はあるのでしょうか?
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title></title> <link rel="stylesheet" href="css/sanitize.min.css"> <link rel="stylesheet" href="css/swiper.min.css"> <script src="js/jquery-2.1.4.min.js"></script> <!--[if lt IE 9]> <script src="js/css3-mediaqueries.min.js"></script> <script src="ja/js/html5shiv.min.js"></script> <![endif]--> </head><body id="wrap"> <div class="wrapper"> <div class="hoge"> <div class="swiper-container"> <div class="swiper-wrapper"> <div class="swiper-slide"> <div class="slide_hoge"> <div class="btn"> <ul class="menu"> <li> <div class="acorditionA" href="#aaaDetail">タイトルA</a></div> </li> <li> <div class="acorditionB" href="#bbbDetail"> タイトルB </div> </li> </ul> </div> <div class="acorditionA_in" id="aaa_detail"> <p>タイトルAの中身</p> <p><a href="#wrap">▲上へ戻る</a></p> </div> <div class="acorditionB_in" id="bbb_detail"> <p>タイトルBの中身</p> <a href="#wrap">▲上へ戻る</a> </div> </div> </div> <div class="swiper-slide"> <div class="slide_hoge"> <div class="btn"> <ul class="menu"> <li> <div class="acorditionA" href="#aaaDetail">タイトルC</a></div> </li> <li> <div class="acorditionB" href="#bbbDetail"> タイトルD </div> </li> </ul> </div> <div class="acorditionA_in" id="aaa_detail"> <p>タイトルCの中身</p> <p><a href="#wrap">▲上へ戻る</a></p> </div> <div class="acorditionB_in" id="bbb_detail"> <p>タイトルDの中身</p> <a href="#wrap">▲上へ戻る</a> </div> </div> </div> </div> </div> <div class="swiper-pagination"></div> <div class="swiper-button-next"></div> <div class="swiper-button-prev"></div> </div> </div><!--// wrapper //--> <script src="js/swiper.min.js"></script> </body> </html>
$(function(){ var swiper = new Swiper('.swiper-container', { pagination: '.swiper-pagination', nextButton: '.swiper-button-next', prevButton: '.swiper-button-prev', slidesPerView: 1, paginationClickable: true, spaceBetween: 30, loop: true, }); $('.acorditionA').click(function(){ $('.acorditionA_in').slideToggle(); }); $('.acorditionB').click(function(){ $('.acorditionB_in').slideToggle(); }); });
.hoge{ position: relative; min-height: 100%; max-width: 1024px; padding: 2rem 4rem 0; margin: 0 auto; } .slide_hoge{ width: 100%; position: relative; } .acorditionB, .acorditionA{ cursor: pointer; } .acorditionB_in, .acorditionA_in{ width: 100%; height: 800px; color: #fff; display: none; } .acorditionA_in{ background-color: #666; } .acorditionB_in{ background-color: #999; } .btn{ width: 100%;text-align: center; } .btn ul{ letter-spacing: -.4em;margin: .5rem 0; } .btn li{ width: 50%; display: inline-block; letter-spacing: normal; padding: .5rem; border: 1px solid #ccc; background-color: #eee; } .btn li a{ display: block;text-decoration: none; } .btn li a:hover{ opacity: .5; } .swiper-pagination{ position: absolute; top: 0; bottom: 0; left: 0; right: 0; z-index: 0; } .swiper-slide{ background: none; }
【追記】
・スライド内のアコーディオンが開いた状態で別のスライドに移動すると、ページの高さがスライドが開いた状態のものになっている
例:「タイトルA」のスライドを開く→スライド→スライド内のアコーディオンが開いていなくても、「タイトルA」が開いているのでページがその高さになっている
これを、スライドごとの高さに変えたい場合はどうすれば良いのでしょうか…?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/14 05:17
2017/07/14 05:59
2017/07/20 01:10