43

我希望能够移动(在灰色背景上,通过拖放)由 Bootstrap 2 提供的模态表单。谁能告诉我实现这一目标的最佳实践是什么?

4

5 回答 5

92

默认情况下,引导程序没有任何拖放功能,但您可以添加一点 jQuery UI 香料来获得您想要的效果。例如,使用draggable框架中的交互,您可以定位您的模态 ID,以允许在模态背景中拖动它。

尝试这个:

JS

$("#myModal").draggable({
    handle: ".modal-header"
});

演示在这里编辑。

更新:bootstrap3 演示

于 2012-09-25T22:41:14.447 回答
9

无论您选择什么可拖动选项,您可能希望关闭引导程序的 CSS 文件中的*-transition属性.modal.fade,或者至少编写一些在拖动过程中暂时禁用它们的 JS。否则,模态不会完全按照您的预期拖动。

于 2013-02-03T11:26:25.913 回答
3

您可以使用这样的小脚本。

从没有 jQuery UI 的 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"});

于 2015-05-25T09:46:56.547 回答
1

建立在使用 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

于 2021-02-11T21:08:37.923 回答
0

jquery UI 很大,可能与引导程序发生冲突。

另一种选择是 DragDrop.js: http: //kbjr.github.io/DragDrop/index.html

DragDrop.bind($('#myModal')[0], {
  anchor: $('#myModal .modal-header')
});

正如@user535673 建议的那样,您仍然必须处理转换。我只是从我的对话框中删除了淡入淡出类。

于 2014-07-03T19:58:10.570 回答