it-swarm.com.ru

сделать стартовый диалог Twitter модальным перетаскиваемым

Я пытаюсь сделать диалог Twitter начальной загрузки модальным с помощью этого плагина jquery:

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))
        });
    }); 

Вы представляете, как я могу это сделать?

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

меня устраивает. Я получил это от там . если вы меня благодарите, пожалуйста, дайте 70% Андрес Ильич

80
Mizbah Ahsan

Лучшее решение (от Мизбы Ахсан) не совсем верно ... но близко. Если вы примените draggable () к модальному диалоговому элементу, полосы прокрутки окна браузера будут перемещаться по экрану при перетаскивании модального диалогового окна. Чтобы исправить это, нужно применить draggable () к классу модального диалога:

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

Спасибо!

24
IdahoB

Вы можете использовать приведенный ниже код, если вы не хотите использовать 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");
    });
});
.modal-header {
    cursor: move;
}
<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>

9
Below the Radar

Как говорили другие, самое простое решение - просто вызвать функцию draggable() из jQuery UI сразу после показа модального:

$('#my-modal').modal('show')
              .draggable({ handle: ".modal-header" });

Но есть несколько проблем с совместимостью между Bootstrap и jQuery UI , поэтому нам нужно исправить некоторые ошибки в css:

.modal
{
    overflow: hidden;
}
.modal-dialog{
    margin-right: 0;
    margin-left: 0;
}
.modal-header{      /* not necessary but imo important for user */
    cursor: move;
}
7
1_bug

использовать перетаскиваемый пользовательский интерфейс jquery, намного проще http://jqueryui.com/draggable/

6
Slim Fadi

я сделал это:

$("#myModal").modal({}).draggable();

и это делает мой очень стандартный/базовый модальный перетаскиваемый.

не знаю, как/почему это сработало, но это сработало.

3
Gordon

В моем случае я включаю Draggable. Оно работает.

var bootstrapDialog = new BootstrapDialog({
    title: 'Message',
    draggable: true,
    closable: false,
    size: BootstrapDialog.SIZE_WIDE,
    message: 'Hello World',
    buttons: [{
         label: 'close',
         action: function (dialogRef) {
             dialogRef.close();
         }
     }],
});
bootstrapDialog.open();

Может быть, это поможет вам.

0
Jugal Panchal

В моем собственном случае мне пришлось установить backdrop и установить свойства top и left, прежде чем я смог применить функцию draggable в модальном диалоге. Может быть, это может кому-то помочь;)

if (!($('.modal.in').length)) {       
$('.modal-dialog').css({
     top: 0,
     left: 0
   });
}
$('#myModal').modal({
  backdrop: false,
   show: true
});

$('.modal-dialog').draggable({
  handle: ".modal-header"
});
0
Akintunde-Rotimi