Bootstrap 2が提供するモーダルフォームを(灰色の背景でドラッグアンドドロップして)移動できるようにしたいと思います。これを実現するためのベストプラクティスを教えてください。
5 に答える
ブートストラップにはデフォルトでドラッグアンドドロップ機能はありませんが、jQuery UIスパイスを少し追加して、探している効果を得ることができます。たとえばdraggable
、フレームワークからのインタラクションを使用して、モーダルIDをターゲットにして、モーダル背景内でドラッグできるようにすることができます。
これを試して:
JS
$("#myModal").draggable({
handle: ".modal-header"
});
更新:bootstrap3デモ
*-transition
ドラッグ可能なオプションが何であれ、ブートストラップのCSSファイルでのプロパティをオフにする.modal.fade
か、少なくともドラッグ中に一時的に無効にするJSを作成することをお勧めします。そうしないと、モーダルは期待どおりに正確にドラッグされません。
このような小さなスクリプトを使用できます。
jQueryUIなしでDraggableから簡略化
(function ($) {
$.fn.drags = function (opt) {
opt = $.extend({
handle: "",
cursor: "move"
}, opt);
var $selected = this;
var $elements = (opt.handle === "") ? this : this.find(opt.handle);
$elements.css('cursor', opt.cursor).on("mousedown", function (e) {
var pos_y = $selected.offset().top - e.pageY,
pos_x = $selected.offset().left - e.pageX;
$(document).on("mousemove", function (e) {
$selected.offset({
top: e.pageY + pos_y,
left: e.pageX + pos_x
});
}).on("mouseup", function () {
$(this).off("mousemove"); // Unbind events from document
});
e.preventDefault(); // disable selection
});
return this;
};
})(jQuery);
例:$( "#someDlg")。modal()。drags({handle: "。modal-header"});
jQuery UIを利用した以前の回答に基づいて、これは1回含まれ、すべてのモーダルに適用され、モーダルを画面に表示したままにするため、ユーザーが誤ってヘッダーを画面から移動してハンドルにアクセスできなくなることはありません。また、発見しやすくするためにカーソルを「移動」に設定します。
$(document).on('shown.bs.modal', function(evt) {
let $modal = $(evt.target);
$modal.find('.modal-content').draggable({
handle: ".modal-header",
containment: $modal
});
$modal.find('.modal-header').css('cursor', 'move')
});
evt.target
実際の背後にある.modal
半透明のオーバーレイ.modal-content
です。
jquery UIは大きく、ブートストラップと競合する可能性があります。
別の方法はDragDrop.jsです:http: //kbjr.github.io/DragDrop/index.html
DragDrop.bind($('#myModal')[0], {
anchor: $('#myModal .modal-header')
});
@ user535673が示唆するように、まだ遷移に対処する必要があります。ダイアログからフェードクラスを削除するだけです。