Библиотека поддерживает Drag-and-drop (DnD) элементов в таблицу и из нее.
Чтобы включить DnD для строк, установите значение true параметру drag.
Drag-and-drop для строк
webix.ui({
    view:"datatable",
    drag:true
});
Чтобы перетягивать строки между несколькими таблицами, нужно включить параметр drag в каждой из таблиц.
Related sample: Drag-and-Drop between Tables in DataTable
В этом режиме HTML перетаскиваемого компонента удаляется с его старого места.
Чтобы добавить драг-н-дроп и активировать режим 'move', установите значение move для параметра drag.
Режим 'move' для строк
webix.ui({
    view:"datatable",
    drag:"move"
});
Related sample: The DnD Modes for Rows
В этом режиме драг-н-дроп позволяет перемещать элементы внутри компонента, изменяя их порядок.
Чтобы добавить драг-н-дроп и активировать режим 'order', установите значение order для параметра drag.
Режим 'order' для строк
webix.ui({
    view:"datatable",
    drag:"order"
});
Related sample: The DnD Modes for Rows
Чтобы включить DnD для столбцов, установите значение true параметру dragColumn.
Drag-and-drop для столбцов
webix.ui({
    view:"datatable",
    dragColumn:true
});
Чтобы перетягивать столбцы между несколькими таблицами, нужно включить параметр dragColumn в каждой из таблиц.
Related sample: Drag-and-Drop Support for Columns
Существует три события, которые будут полезны в процессе перетягивания:
В режиме "order" столбцы не могут быть перетянуты за пределы границ таблицы. Кроме того, в момент перетягивания пользователем столбца, остальные столбцы автоматически группируются, чтобы освободить место для столбца.
Чтобы добавить драг-н-дроп и активировать режим 'order' для столбцов, установите значение order для параметра dragColumn.
Режим "order" для столбцов
webix.ui({
    view:"datatable",
    dragColumn:"order"
});
Related sample: Datatable: Column Reordering
Если включен драг-н-дроп в режиме "order" события onBeforeColumnDrop и onAfterColumnDrop не сработают. Вместо них сработают события:
Следуйте этим рекомендациям, чтобы настроить режимы DnD:
Чтобы изменить маркер драг-н-дроп по умолчанию (элемент, который отображается рядом с курсором мыши во время перетаскивания), используйте событие onBeforeDrag.
Содержимое элемента определяется с помощью свойства context.html. Вы можете назначить ему любой текст или HTML.
dtable.attachEvent("onBeforeDrag", function(context, ev){
    context.html = context.source.length+" item(s)";
});
dtable.attachEvent("onBeforeDrag", function(context, ev){
    context.html = "<img src='some.gif'></img> " + context.start;
});

dtable.attachEvent("onBeforeDrag", function(context, ev){
    context.html = "";
    for (var i=0; i< context.source.length; i++){
        context.html += context.from.getItem(context.source[i]).title + "<br>" ;
    }
});
Related sample: Using Events for Customizing Drag-and-Drop
Чтобы запретить перетаскивание определенных элементов, используйте свойство onBeforeDrag.
Запрет на перетаскивание четных элементов
dtable.attachEvent("onBeforeDrag", function(context, ev){
    if(dtable.getIndexById(context.start)%2==0){
        return false;  //запрещает перетаскивание если индекс элемента четный
    }
    return true;      //позволяет перетаскивания в любых других случаях
});
Вы можете использовать метод addCss, чтобы отмечать элементы, и метод hasCss, чтобы проверить есть ли у элемента отметка.
Чтобы запретить перетягивание в определенное место, используйте событие onBeforeDrop, которое будет возвращать false каждый раз, когда вы хотите запрещать перемещение.
Предположим, вы решили запретить перетаскивание в положение элемента с 'id=2':
Запрет перетаскивания в определенную область
var dtable = webix.ui({
    view:"datatable",
    data:[
        { id:1, title:"The Shawshank Redemption", year:1994},
        { id:2, title:"The Godfather",            year:1972},
        { id:3, title:"The Godfather: Part II",   year:1974}
    ]
});
dtable.data.addMark(2,"type", false,"b"); // добавляет флаг (type='b') элементу с id=2
 
dtable.attachEvent("onBeforeDrop", function(context, ev){
// если у элемента есть флаг type='b', запрещает перетаскивание в его местоположение
    if(dtable.data.getMark(context.target,"type")=='b') return false;
    return true;
});
По умолчанию строки при DnD перемещается, но не копируются.
Чтобы изменить поведение на "копирование", используйте событие onBeforeDrop. Задайте внутри события логику копирования и возвращайте false для предотвращения обработки DnD:
Изменение логики DnD на копирование
dtable.attachEvent("onBeforeDrop", function(context, ev){
    for (var i=0; i< context.source.length; i++){
        context.from.copy(context.source[i],context.index,this,webix.uid());
    }
    return false;
});
Related sample: Using Events for Customizing Drag-and-Drop

По умолчанию вы можете перетянуть элемент "потянув" за его любую часть. Чтобы ограничить область элемента, отвечающую на DnD, выполните следующие действия:
1. Добавьте или определите часть элемента, которая будет отвечать на перетягивание.
2. Установите этот область как целевой объект для события onBeforeDrag.
.webix_drag_handle{
    background-image:url(./handle.png);
    background-repeat: no-repeat;
}
var dtable = webix.ui({
    view:"datatable",
    // настройки datatable
    columns:[
        { id:"rank",    header:"", css:"rank" },
        { id:"title",   header:"Film title" },
        { id:"year",    header:"Released"},
        { id:"drag",    header:"", template:"<div class='webix_drag_handle'></div>" }
    ],
    on:{
        onBeforeDrag:function(data, e){
            return (e.target||e.srcElement).className == "webix_drag_handle";
        }
    }
});
Если цель события не содержит "webix_drag_handle", DnD не сработает.
Related sample:  Limiting Draggable Area for Items (Dragging Rows)
Related sample:  Limiting Draggable Area for Items (Dragging Columns)
По умолчанию таблица прокручивается когда перетягивание приближается к нижней границе. Это поведение можно переопределить используя свойство dragscroll:
webix.ui({
    view:"datatable",
    dragscroll:false
});
По умолчанию скролл при перетаскивании работает вертикально. Чтобы включить скрол в обоих направлениях, задайте свойству dragscroll значение xy:
webix.ui({
    view:"datatable",
    dragscroll:"xy"
});
Следующие события вызываются во время Dnd и могут быть использованы для его настройки:
Проверьте свои силы по ссылке.
Наверх