Я знаю, что прошли годы с тех пор, как был задан этот первоначальный вопрос, но на момент написания этой статьи кендо по-прежнему не поддерживает механизм ручки. Однако есть способ реализовать функцию дескриптора, который я напишу здесь в надежде, что кто-то в будущем может найти его полезным. Примечание. Я не считаю, что это правильное решение, потому что считаю, что API Kendo должен иметь эту функцию.
Использование мыши
Предотвратить перетаскивание
Когда мы начинаем перетаскивать виджет, мы хотим, чтобы перетаскивание происходило только в том случае, если наша мышь находится над допустимым дескриптором.
Определите флаг в коде вашего компонента.
/** whether we should allow dragging **/
allowDrag: boolean = false;
Прослушивание dragStart
в элементе kendo-sortable
<kendo-sortable (dragStart)="onDragStart($event)">
Остановить событие dragStart по умолчанию когда флаг равен true
/** handles the starting of dragging */
onDragStart(e: DragStartEvent): void {
if (!this.allowDrag) {
e.preventDefault();
return;
}
}
Переключение при наведении мыши и выходе из мыши
Когда ваша мышь находится над элементом ручки, включите флаг. Когда ваша мышь покинет элемент, отключите флаг.
<div (mouseover)="allowDrag = true" (mouseleave)="allowDrag = false" class="drag-handle"></div>
Включение пользователей с сенсорным экраном
Философия описанного выше подхода основывается только на прослушивании событий mouseover
и mouseleave
в дескрипторе и игнорировании всего остального. Для мобильных устройств это немного сложнее, потому что нет положения мыши, которое конкретно определяет, находится ли пользователь в положении для перетаскивания. Итак, мы должны добавить прослушиватель для обработки элементов, а также для всех других элементов, не являющихся дескрипторами, которые мы не хотим перетаскивать. Этот подход можно было бы использовать и для щелчков мышью, хотя я считаю, что лучшим подходом является только присоединение к элементам ручки.
Примечание. Я еще не полностью протестировал этот подход, и он может не подходить для всех условий и не работать должным образом для всех пользователей.
Добавьте событие touchstart
В вашем представлении прислушивайтесь к прикосновению к ручке
<div (touchstart)="allowDrag = true" (mouseover)="allowDrag = true"
(mouseleave)="allowDrag = false" class="drag-handle"></div>
Также включая касание всего, что не является ручкой
<div (touchstart)="allowDrag = false">
My non-draggable thing
</div>
person
luxdvie
schedule
13.09.2020