を使用する代わりに、次のようmy, at, of
に自分で位置を計算できます。left
top
$("#btnNewIssue").on("click", function() {
var $button = $(this);
var $dialog = $('#newIssueDialog');
//var top = $button.position().top + $button.height() + ($button.outerHeight() / 2);
var top = $button.position().top + $button.height() + (($button.outerHeight(true) - $button.height()));
var left = ($(document).width() - ($dialog.outerWidth / 2)) / 2
$dialog.dialog({
autoOpen: true,
modal: true,
closeOnEscape: true,
draggable: false,
resizable: false,
width: 415,
height: 175,
position: [left, top]
});
});
例として基本的なHTMLを使用する:
<div id="newIssueDialog"> My modal dialog</div>
<button id="btnNewIssue">Click Me</button>
</ p>
デモ-ボタンの下にダイアログを配置しますが、ウィンドウ/ドキュメントの中央に配置します
上記の例で使用document
していますが、必要に応じて代わりにウィンドウを使用できます。違いはほとんどないはずです。
編集
ボタンの境界線の高さ、パディング、マージンが正しく含まれていなかった見落としを修正しました。
ボタンにが指定されている場合に備えて、height
fromouterHeight(true)
とボタンの控除を追加せずにフィドルを保存しました。borders
padding
margins
これ:
var top = $button.position().top + $button.height() + ($button.outerHeight() / 2);
これである必要があります:
var top = $button.position().top + $button.height() + (($button.outerHeight(true) - $button.height()));
デモも更新されました。
編集
ただし、ページにスクロールバーが表示されている場合は、問題が発生しています。
垂直スクロール位置のscrollTop()
場合は、次のように最後の現在の値を差し引くだけです。
var top = $button.position().top + $button.height() + ($button.outerHeight(true) - $button.height()) - $(window).scrollTop();
モーダルを水平方向の中央に配置するために、何も変更する必要はありません。上記の計算コードはleft
常に機能しているようです。ただし、特定のマークアップで問題が発生する場合は、scrollLeft()を確認してください。これは、次のように差し引く必要があるという点で同じように機能すると思います。
var left = (($(document).width() - ($dialog.outerWidth / 2)) / 2) - $(window).scrollLeft();
またはおそらく
var left = ($(window).scrollLeft() - $(document).width() - ($dialog.outerWidth / 2)) / 2;
すでに述べたように、以下のデモはそれを必要としませんが、必要な場合は、それを動かして、どのように収まるかを確認してください。
ボタンが画面の下部に近い場合、モーダルは画面外に表示できないためボタンの下には表示されませんが、代わりにダイアログの下部が画面の下部に揃えられることに注意してください。これは予想される動作です。ただし、ボタンの下に十分なスペースがある場合、ダイアログはボタンのすぐ下で常に期待どおりに表示されます。
デモ-ウィンドウのスクロール位置を含む
(ボタンに到達するには下にスクロールする必要があり、正しくテストするには右にスクロールすることもできます)