Draggable SimpleModal Popup - PullRequest
       13

Draggable SimpleModal Popup

2 голосов
/ 05 марта 2011

Для Jquery Эрика Мартина SimpleModal 1.4.1 Мне бы хотелось, чтобы всплывающее окно было перетаскиваемым, поэтому я попробовал это $ ( '# Основного покадрово-контент'). Модальный ({ onShow: функция (диалог) {
dialog.container.draggable ({handle: 'div'}); } });

отображается всплывающее окно, но я получаю сообщение об ошибке «объект не поддерживает свойство метода»

Я добавил jquery-ui-1.8.10 в качестве скрипта ref и class = "ui-widget-content" в div.

Идеи


РЕДАКТИРОВАТЬ: удаление дескриптора: «div» не делает ничего нового, та же ошибка, не может переместить диалог

Эти два не работают, ошибка «объект не поддерживает свойство метода»

 $('#basic-modal-content').modal({
        onShow: function(dialog) { $(dialog.container).draggable(); } 
    });


   $('#basic-modal-content').modal({
        onShow: function(dialog) { $(dialog.container).draggable({handle: 'div'}); } 
    });

console.log($(dialog.container));
Result :[object Object]

Ответы [ 2 ]

1 голос
/ 07 марта 2011

Привет, я подтверждаю свой комментарий :), используйте это:

jQuery(function ($) {
    // Load dialog on page load
    //$('#basic-modal-content').modal();

    // Load dialog on click
    $('#basic-modal .basic').click(function (e) {
        $('#basic-modal-content').modal({
            onShow: function(dialog) {
                console.log($(dialog));

                $(dialog.container).draggable();
            }
        });

        return false;
    });
});

Вы должны указать элемент DOM!

РЕДАКТИРОВАТЬ: Я добавил код ввода, который я использую.

0 голосов
/ 12 июня 2015

Если вам на самом деле не нужно использовать библиотеку JQuery UI, вы можете использовать следующий код, который я нашел в jsfiddle в http://jsfiddle.net/mkUJf/666/ "div # modalbox-container" может быть любым.Я просто выбрал использование внешнего контейнера модального типа.

//make modal draggable
$(function () {
    $('body').on('mousedown', 'div#modalbox-container', function () {
        $(this).addClass('draggable').parents().on('mousemove', function (e) {
            $('.draggable').offset({
                top: e.pageY - $('.draggable').outerHeight() / 2,
                left: e.pageX - $('.draggable').outerWidth() / 2
            }).on('mouseup', function () {
                $(this).removeClass('draggable');
            });
        });
        e.preventDefault();
    }).on('mouseup', function () {
        $('.draggable').removeClass('draggable');
    });
});

Или вы можете добавить плагин jquery, например: ref: https://css -tricks.com / snippets / jquery / draggable-without-jquery-ui /

(function($) {
$.fn.drags = function(opt) {

    opt = $.extend({handle:"",cursor:"move"}, opt);

    if(opt.handle === "") {
        var $el = this;
    } else {
        var $el = this.find(opt.handle);
    }

    return $el.css('cursor', opt.cursor).on("mousedown", function(e) {
        if(opt.handle === "") {
            var $drag = $(this).addClass('draggable');
        } else {
            var $drag = $(this).addClass('active-handle').parent().addClass('draggable');
        }
        var z_idx = $drag.css('z-index'),
            drg_h = $drag.outerHeight(),
            drg_w = $drag.outerWidth(),
            pos_y = $drag.offset().top + drg_h - e.pageY,
            pos_x = $drag.offset().left + drg_w - e.pageX;
        $drag.css('z-index', 1000).parents().on("mousemove", function(e) {
            $('.draggable').offset({
                top:e.pageY + pos_y - drg_h,
                left:e.pageX + pos_x - drg_w
            }).on("mouseup", function() {
                $(this).removeClass('draggable').css('z-index', z_idx);
            });
        });
        e.preventDefault(); // disable selection
    }).on("mouseup", function() {
        if(opt.handle === "") {
            $(this).removeClass('draggable');
        } else {
            $(this).removeClass('active-handle').parent().removeClass('draggable');
        }
    });

}
})(jQuery);

Обе части кода в значительной степени подключи и играй.

...