drawer.js を使ってドロワーメニューを表示しています。
商品一覧画面でハンバーガーメニューがタップされたときはグローバルナビを、
「条件を指定する」ボタンがタップされたときは条件指定フォームを、
それぞれ同じドロワー内で出し分けたいと思っているのですが、
スクロールの縦幅指定だけがうまくいきません。
現在のやり方としては、タップされたボタンに応じてdrawer-navの中身を
jsで入れ替えているのですが、要素の高さが変わってしまうと、
$('.drawer').drawer(); が走ったときにドロワー内の要素の高さが記憶されて
しまっているようで、入れ替えた後の要素の高さに合わせる制御ができません。
それがどこで記憶されているのかが分かれば対応のしようがあるのですが、
見つけ出せず困っています。。
現象:
最初の要素の高さが1500pxで、入れ替えた後の要素の高さが1000pxの場合、
1000pxまでしかスクロールしてほしくないが、1500pxまでスクロールしてしまう。
※要素の下部に500pxの空白ができてしまう。
コード:
if($('body').hasClass("drawer-open")){ if (drawer_open_flg == false) { if($('.filterConditionBtn')){ if($(this).hasClass('filterConditionBtn')){ // 元の要素を非表示 $('#sp_gnav').css('display', 'none'); // 検索条件フォームの要素を挿入 → 表示 $('#itemList_sideNav').clone().prependTo('.drawer-menu'); $('.drawer-menu #itemList_sideNav').css('display', 'block'); } } drawer_open_flg = true; // 背景のスクロール停止 window.addEventListener( 'touchmove' , movefun , { passive: false } ); } } else if($('body').hasClass('drawer-close')) { if (drawer_open_flg == true) { if($('.filterConditionBtn')){ if($('.drawer-menu #itemList_sideNav')){ // 検索条件フォームの要素を削除 $('.drawer-menu #itemList_sideNav').remove(); } // 元々の要素を表示 $('#sp_gnav').css('display', 'block'); } drawer_open_flg = false; // 背景のスクロール停止を解除 window.removeEventListener( 'touchmove' , movefun, { passive: false } ); } } });
.drawer()メソッドを複数回呼べるのであればそうしようと思っていたのですが、
どうもできないっぽいので苦肉の策としてこのようなやり方をしています。
解決策がお分かりの方、もしくはもっとスマートなやり方があれば
ご教示いただけますと幸いです。
よろしくお願い致します。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/29 11:59 編集
2018/08/29 14:34 編集