質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

Q&A

解決済

1回答

643閲覧

bxslider 内にアコーディオンを設置の挙動

nerd

総合スコア37

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

1グッド

0クリップ

投稿2018/03/22 12:25

コンテンツスライダーのような形でbxslider を利用してコンテンツ作成をしております。

その中で、bxsliderの中にアコーディオンを設置した時の挙動で思った通りのイメージで動かないのでご相談させていただきます。

###実装したい内容といたしましては
bxsilder を使用して横に動くコンテンツの作成
コンテンツの中にアコーディオンを実装し、そのアコーディオンの伸縮とともにbxslider側の縦サイズを連動させたいです。

###現状把握している内容としては
該当コンテンツに来た時にアコーディオンを開くと動作はしますが、伸び多分の内容は隠れて表示されてしまいます。
アコーディオンが見えない状態ですが、コード的には開いている状態の時にスライダーをスライドさせ、再度戻ってくると
アコーディオンが開いた高さの状態で高さが再取得されちゃんとした状態で表示されるのを確認しました。
bxsliderの高さ調整の部分がスライドされたときに設定されているためこの現象が起こるのかと想定しております。

自分の考えとしては、アコーディオンをクリックするたびに、bxslider側の縦サイズを再読み込みさせると
期待通りの動きになるのかなと想像しておりますが、やり方、どこを呼べばいいのかわからないです。

何かヒントの一つでもいただけますと幸いです。
何卒よろしくお願いいたします。

html

<ul class="bxslider"> <li class="sample_01"> contents01 </li> <li class="sample_02"> <dl id="acMenu"> <dt>アコーディオンメニュー1</dt> <dd>アコーディオンメニューが開く。</dd> <dt>アコーディオンメニュー2</dt> <dd>アコーディオンメニューが開く。</dd> <dt>アコーディオンメニュー3</dt> <dd>アコーディオンメニューが開く。</dd> </dl> </li> </ul>

css

.sample_01{background: #d2d2d2;} .sample_02{background: red;} #acMenu dt{ display:block; width:200px; height:50px; line-height:50px; text-align:center; border:#666 1px solid; cursor:pointer; } #acMenu dd{ background:#f2f2f2; width:200px; height:50px; line-height:50px; text-align:center; border:#666 1px solid; display:none; }

js

$(function(){ $('.bxslider').bxSlider({ pager:false, infiniteLoop: false, adaptiveHeight:true }); }); $(function(){ $("#acMenu dt").on("click", function() { $(this).next().slideToggle(); }); });

jquery 1.11.3を使用

karamarimo👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

bxsliderの高さ調整の部分がスライドされたときに設定されているためこの現象が起こるのかと想定しております。

確かにそうだと思います。

自分の考えとしては、アコーディオンをクリックするたびに、bxslider側の縦サイズを再読み込みさせると

期待通りの動きになるのかなと想像しておりますが、やり方、どこを呼べばいいのかわからないです。

Options - bxSlider
"public methods"のところにredrawSliderというそれらしきものがあります。
試してみたところ、これを実行することでスライダーの高さが表示されているスライドの高さに更新されます。

アコーディオンの開閉(slideToggle)がアニメーションで滑らかに行われるので、それに合わせて滑らかにスライダーの高さを更新するには、slideToggleprogressコールバックにてredrawSliderをすればいいです。

slideToggle(options) - jQuery

JSFiddle Demo (滑らか)

js

1 $(this).next().slideToggle({ 2 progress: function() { 3 slider.redrawSlider(); 4 } 5 });

ただ、表示する内容によってはアニメーションが重くなることもあるかもしれないので、その場合はslideTogglecompleteコールバックで、開閉が完了した時点で高さを更新するようにすればいいと思います。

JSFiddle Demo (滑らかでない)

js

1 $(this).next().slideToggle({ 2 complete: function() { 3 slider.redrawSlider(); 4 } 5 });

投稿2018/03/24 07:19

karamarimo

総合スコア2551

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nerd

2018/03/27 00:47

ご連絡遅くなり申し訳ございません。 サンプルコードのご提示誠にありがとうございました! うまく実装できました!! 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問