私のページにbootstrapドロップメニューリストがあります。ページが最小化されるか、画面が調整されると、メニューリストが画面から消えます。画面の高さが画面から消えるリスト。
これが私のhtmlです。
<div class="btn-group pull-right">
<button type="button" class="btn dropdown-toggle" data-toggle="dropdown" aria-expanded="false">Click<span class="caret"></span></button>
<ul class="dropdown-menu pull-right" role="menu">
<li>First</li>
<li>Second></li>
<li>Third</li>
<li><Fourth</li>
<li>Fifth</li>
</ul>
</div>
注:リストは、幅ではなく高さに応じて表示されます。すでに「pull-right」を使用しているので、画面の幅は関係ありません。これにより、リストが画面内に表示されます。
トグルコントロールがクリックされたときにドロップダウンメニューが代わりに上向きに表示されるようにするには、メニューのコンテナ要素で.dropup
クラスを使用する必要があります。このクラスをいつ適用するかを決定するには、展開されたドロップダウンの下部がウィンドウの下に表示されるかどうかを計算し、適用される場合は、.dropup
クラスを適用します。
これの1つの可能な実装(ウィンドウのscroll
イベントに添付):
function determineDropDirection(){
$(".dropdown-menu").each( function(){
// Invisibly expand the dropdown menu so its true height can be calculated
$(this).css({
visibility: "hidden",
display: "block"
});
// Necessary to remove class each time so we don't unwantedly use dropup's offset top
$(this).parent().removeClass("dropup");
// Determine whether bottom of menu will be below window at current scroll position
if ($(this).offset().top + $(this).outerHeight() > $(window).innerHeight() + $(window).scrollTop()){
$(this).parent().addClass("dropup");
}
// Return dropdown menu to fully hidden state
$(this).removeAttr("style");
});
}
determineDropDirection();
$(window).scroll(determineDropDirection);
これが Bootply であることを示しています。デモパネルを短くしてから、パネルを上下にスクロールして、使用可能なスペースに応じて、ドロップダウンメニューがトグルコントロールの上/下にどのように表示されるかを確認します。
お役に立てれば!ご不明な点がございましたらお知らせください。
ドロップダウンメニューがクリックされた場合にコードを実行したい場合に備えて、@ Serliteソリューションに基づいてクリックイベントを作成しました。
$(document.body).on('click', '[data-toggle=dropdown]', function(){
var dropmenu = $(this).next('.dropdown-menu');
dropmenu.css({
visibility: "hidden",
display: "block"
});
// Necessary to remove class each time so we don't unwantedly use dropup's offset top
dropmenu.parent().removeClass("dropup");
// Determine whether bottom of menu will be below window at current scroll position
if (dropmenu.offset().top + dropmenu.outerHeight() > $(window).innerHeight() + $(window).scrollTop()){
dropmenu.parent().addClass("dropup");
}
// Return dropdown menu to fully hidden state
dropmenu.removeAttr("style");
});