jQuery sortable (johnny) загрузчик 3 выпуск navbar

У меня проблема с начальной загрузкой, которую можно отсортировать в начальной загрузке 3.

$(".nav").sortable({
    group: 'nav',
    nested: false,
    vertical: false,
    exclude: '.divider-vertical',
    onDragStart: function($item, container, _super) {
        $item.find('.dropdown-menu').sortable('disable');
        _super($item, container);
    },
    onDrop: function($item, container, _super) {
        $item.find('.dropdown-menu').sortable('enable');
        _super($item, container);
    }
});

$(".dropdown-menu").sortable({
    group: 'nav'
});

Вот скрипка, чтобы просто показать вам, что я имею в виду.

https://jsfiddle.net/xpv1t4gq/1/

Когда вы пытаетесь перетащить ссылку (это лучше всего видно на контакте), она не относится к курсору.

Я играл с этим последние несколько дней, но я не могу заставить его работать...

Кто-нибудь, кто может помочь мне с этим?

2 ответа

Решение

У меня была такая же проблема несколько часов назад, и я сделал это! Надеюсь, поможет.

Для начала вам нужно отредактировать 2 функции в jquery-sortable.js:

onDrag: function ($item, position, _super, event) {
        x = $("#VerticalSort").val();
        if (x == 0) {
            $("#VerticalSort").val(position.left);
            position.left = 0;
        }
        else {
            position.left = position.left - x;
        }
        position.top = 0;
      $item.css(position)
    },

 onDrop: function ($item, container, _super, event) {
        $("#VerticalSort").val("0");
      $item.removeClass(container.group.options.draggedClass).removeAttr("style")
      $("body").removeClass(container.group.options.bodyClass)
    },

Я использовал скрытый ввод в моем представлении только для тестирования решения, но идея состоит в том, чтобы сохранить значение первого щелчка для вычеркивания позже и сбросить до 0 в действии удаления.

<input id="VerticalSort" type="hidden" value="0" >

проблема в том, что в какой-то момент JS удваивают значения первого клика для x/y (в коде js с именами "left" и "top")

Надеюсь, это работает для вас.

С уважением!

У меня была та же проблема, и вам нужно включить параметр: delay > 0, Пример:

$(".nav").sortable({
    group: 'nav',
    nested: false,
    vertical: false,
    exclude: '.divider-vertical',
    delay: 5,
    onDragStart: function($item, container, _super) {
        $item.find('.dropdown-menu').sortable('disable');
        _super($item, container);
    },
    onDrop: function($item, container, _super) {
        $item.find('.dropdown-menu').sortable('enable');
        _super($item, container);
    }
});
Другие вопросы по тегам