2012-09-25 23 views

Trả lời

78

Trình khởi động không đi kèm với bất kỳ chức năng kéo và thả theo mặc định, nhưng bạn có thể thêm một chút jQuery UI gia vị vào hỗn hợp để có được hiệu ứng bạn đang tìm kiếm. Ví dụ: sử dụng tương tác draggable từ khung công tác, bạn có thể nhắm mục tiêu ID phương thức của mình để cho phép nó được kéo xung quanh phông nền phương thức.

Hãy thử điều này:

JS

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

Demo, sửa here.

Cập nhật: bootstrap3 demo

+1

Sau khi đặt '.modal-header {cursor: move}', nó hoạt động như một nét duyên dáng. – DontVoteMeDown

+0

Tôi không thể thấy điều này làm việc trên phiên bản bootstrap cuối cùng, 3.3.5. Có lời khuyên nào không? Đã thay đổi Jquery thành 1.11.0, nhưng không may mắn. Cảm ơn. – Khrys

+1

Xin chào @Khrys, đây là bản trình diễn được cập nhật với tiêu đề phương thức có thể kéo, http://output.jsbin.com/vafulubaju. Câu trả lời này khá cũ nên tôi đoán một số liên kết JS trong bản demo bị hỏng). –

8

Dù kéo tùy chọn bạn đi, bạn có thể muốn tắt *-transition thuộc tính cho .modal.fade trong file CSS bootstrap, hoặc ít nhất là viết một số JS tạm thời vô hiệu hóa chúng trong thời gian kéo. Nếu không, phương thức sẽ không kéo chính xác như bạn mong đợi.

+2

vấn đề này được thảo luận và giải quyết tại http://stackoverflow.com/questions/15881245/draggable-js-bootstrap-modal-performance-issues – bbodenmiller

0

Giao diện người dùng jquery lớn và có thể xung đột với trình khởi động.

Một cách khác là DragDrop.js: http://kbjr.github.io/DragDrop/index.html

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

Bạn vẫn phải đối phó với các chuyển động, như @ user535673 gợi ý. Tôi chỉ cần loại bỏ các lớp mờ dần từ hộp thoại của tôi.

2

Bạn có thể sử dụng một tập lệnh nhỏ như thế này.

đơn giản hóa từ 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); 

dụ: $ ("# someDlg") modal() kéo ({xử lý: "modal-header"})..;

+0

Mã của bạn đã lỗi thời. Đã thử mã của bạn và nó hoạt động, nhưng kéo là lỗi. Đã sửa lỗi bằng cách lấy mã từ liên kết ở trên. Vui lòng cập nhật mã của bạn, dựa trên mã từ liên kết. –

Các vấn đề liên quan