make bootstrap twitter dialog modal draggable

pag*_*tti 45 jquery modal-dialog draggable twitter-bootstrap

我正在尝试用这个jquery插件制作bootstrap twitter对话模式draggable:

http://threedubmedia.com/code/event/drag#demos

但它不起作用.

var $div = $('html');
console.debug($('.drag'));
$('#modalTest')
    .drag("start", function(ev, dd) {
        dd.limit = $div.offset();
        dd.limit.bottom = dd.limit.top + $div.outerHeight() - $(this).outerHeight();
        dd.limit.right = dd.limit.left + $div.outerWidth() - $(this).outerWidth();
    })
    .drag(function(ev, dd) {
        $(this).css({
            top: Math.min(dd.limit.bottom, Math.max(dd.limit.top, dd.offsetY))
            , left: Math.min(dd.limit.right, Math.max(dd.limit.left, dd.offsetX))
        });
    }); 
Run Code Online (Sandbox Code Playgroud)

你知道我该怎么办?

Miz*_*san 85

$("#myModal").draggable({
    handle: ".modal-header"
}); 
Run Code Online (Sandbox Code Playgroud)

这个对我有用.我是从那里得到的.如果你感谢我,请给Andres Ilich 70%

  • 你必须包含jquery.ui,因为可拖动的功能来自那里.:) (8认同)
  • 这种方式实现了拖动工作,但非常错误. (2认同)
  • @IdahoB 的答案对我来说效果更好,没有奇怪的拖动工件 /sf/answers/2738840331/ (2认同)

Bel*_*dar 29

如果您不想使用jQuery UI或任何第三方插件,可以使用下面的代码.它只是简单的jQuery.

$(".modal").modal("show");

$(".modal-header").on("mousedown", function(mousedownEvt) {
    var $draggable = $(this);
    var x = mousedownEvt.pageX - $draggable.offset().left,
        y = mousedownEvt.pageY - $draggable.offset().top;
    $("body").on("mousemove.draggable", function(mousemoveEvt) {
        $draggable.closest(".modal-dialog").offset({
            "left": mousemoveEvt.pageX - x,
            "top": mousemoveEvt.pageY - y
        });
    });
    $("body").one("mouseup", function() {
        $("body").off("mousemove.draggable");
    });
    $draggable.closest(".modal").one("bs.modal.hide", function() {
        $("body").off("mousemove.draggable");
    });
});
Run Code Online (Sandbox Code Playgroud)
.modal-header {
    cursor: move;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>

<div class="modal fade" tabindex="-1" role="dialog">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title">Modal title</h4>
      </div>
      <div class="modal-body">
        <p>One fine body&hellip;</p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div><!-- /.modal-content -->
  </div><!-- /.modal-dialog -->
</div>
Run Code Online (Sandbox Code Playgroud)

  • 最佳答案。该解决方案不依赖于jQuery-ui。 (4认同)
  • 这可行,但在 Bootstrap 4 中,当您开始拖动时,对话框会跳动一下。我将行 `$draggable.closest(".modal-dialog").offset...` 更改为 `$draggable.closest(".modal-content").offset...` 现在它可以正常工作了。 (2认同)

Ida*_*hoB 26

排名靠前的解决方案(由Mizbah Ahsan提供)并不是很正确......但是很接近.如果将draggable()应用于模态对话框元素,则在拖动模式对话框时,浏览器窗口滚动条将在屏幕上拖动.解决这个问题的方法是将draggable()应用于模态对话框类:

$(".modal-dialog").draggable({
    handle: ".modal-header"
});
Run Code Online (Sandbox Code Playgroud)

谢谢!


1_b*_*bug 7

像其他人说的那样,最简单的解决方案就是 在显示模态之后draggable()jQuery UI调用函数:

$('#my-modal').modal('show')
              .draggable({ handle: ".modal-header" });
Run Code Online (Sandbox Code Playgroud)

但是BootstrapjQuery UI之间的兼容性存在一些问题,因此我们需要在css中添加一些额外的修复:

.modal
{
    overflow: hidden;
}
.modal-dialog{
    margin-right: 0;
    margin-left: 0;
}
.modal-header{      /* not necessary but imo important for user */
    cursor: move;
}
Run Code Online (Sandbox Code Playgroud)

  • 这对于拖动非常有用,但模态然后在屏幕的左边距上打开。 (2认同)

Sli*_*adi 6

使用jquery UI可拖动,更简单 http://jqueryui.com/draggable/


Gor*_*don 5

我这样做了:

$("#myModal").modal({}).draggable();
Run Code Online (Sandbox Code Playgroud)

它使我非常标准/基本的模态可拖动。

不知道它是如何/为什么起作用的,但确实如此。