【发布时间】:2012-09-17 11:32:33
【问题描述】:
我希望能够移动(在灰色背景上,通过拖放)Bootstrap 2 提供的模态表单。谁能告诉我实现这一目标的最佳做法是什么?
【问题讨论】:
-
查看我的普通 jQuery 答案(无需 3rd 方插件或 jQuery UI)stackoverflow.com/a/51824269/1914034
标签: drag-and-drop twitter-bootstrap
我希望能够移动(在灰色背景上,通过拖放)Bootstrap 2 提供的模态表单。谁能告诉我实现这一目标的最佳做法是什么?
【问题讨论】:
标签: drag-and-drop twitter-bootstrap
默认情况下,引导程序没有任何拖放功能,但您可以添加一点 jQuery UI 香料来获得您想要的效果。例如,使用框架中的draggable 交互,您可以定位您的模态ID,以允许在模态背景中拖动它。
试试这个:
JS
$("#myModal").draggable({
handle: ".modal-header"
});
【讨论】:
.modal-header { cursor: move }后,这就像一个魅力。
无论你选择什么可拖动选项,你可能想要在引导程序的 CSS 文件中关闭 .modal.fade 的 *-transition 属性,或者至少编写一些在拖动过程中暂时禁用它们的 JS。否则,模态不会完全按照您的预期拖动。
【讨论】:
jquery UI 很大,可能与引导程序发生冲突。
另一种选择是 DragDrop.js:http://kbjr.github.io/DragDrop/index.html
DragDrop.bind($('#myModal')[0], {
anchor: $('#myModal .modal-header')
});
正如@user535673 建议的那样,您仍然必须处理转换。我只是从我的对话框中删除了淡入淡出类。
【讨论】:
你可以使用这样的小脚本。
从Draggable without jQuery UI简化
(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 的先前答案的基础上,包含一次的此功能将应用于您的所有模态并将模态保持在屏幕上,因此用户不会意外地将标题移出屏幕,从而无法再访问句柄。还将光标设置为“移动”以便更好地发现。
$(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 后面的半透明覆盖层。
【讨论】: