我想能够在Bootstrap 2提供的模式窗体中拖放以便移动(在灰色背景上)。有人能告诉我实现这一目标的最佳做法是什么吗?
Bootstrap默认不提供任何拖放功能,但您可以添加一些jQuery UI效果,以实现所需的效果。例如,使用框架中的draggable
交互,您可以针对模态框ID,使其能够在模态框背景内拖动。
请尝试以下操作:
JS
$("#myModal").draggable({
handle: ".modal-header"
});
更新: Bootstrap3 演示
.modal-header { cursor: move }
之后,这个功能就像魔法一样好用。 - DontVoteMeDown.modal.fade
的*-transition
属性,或者至少编写一些 JS 代码,在拖动期间临时禁用它们。否则,模态框不会完全按照您的预期进行拖动。 (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);
在之前利用 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-content
后面的半透明覆盖层 .modal
。
jQuery UI很大,可能与Bootstrap冲突。
另一个选择是DragDrop.js:http://kbjr.github.io/DragDrop/index.html
DragDrop.bind($('#myModal')[0], {
anchor: $('#myModal .modal-header')
});
你还需要处理过渡,就像@user535673建议的那样。我只是从我的对话框中删除了淡入淡出的类。