book-open 1 test
Образцы UX

UX паттерны для перетаскивания (Drag and Drop) компонентов в дизайн-системе


Вы читаете перевод статьи “Drag and Drop for Design Systems”. Над переводом работали: Ольга Жолудова и Ринат Шайхутдинов.

Вы скорее всего встречали функционал drag-and-drop в куче интерфейсов: в гугл-почте можно перетаскивать письма в папки, в Трелло — передвигать карточки, в Хроме — менять вкладки местами. Эти взаимодействия гораздо сложнее, чем кажется — я это поняла, когда проектировала drag-and-drop паттерны в VMware.

Перетаскивание писем по папкам в гугл-почте

Перемещение карточек в Трелло (Asian crackers )

Перетаскивание писем по папкам в гугл-почте

Часто пользователи вообще не замечают drag-and-drop взаимодействий — настолько естественно они выглядят. Но все же, если присмотреться, все они разные: в UX пока нет единого стандарта по drag-and-drop.

Интересуетесь свежими статьями по продуктовому дизайну (UX/UI)? 🚀

Подписывайтесь на канал в Telegram | ВКонтакте, Instagram, Facebook

Нет ничего плохого в том, что в каждом интерфейсе свой подход к drag-and-drop. У каждого дизайнера свои аргументы в пользу того или иного паттерна. Вот, например, в Трелло карточки при перетаскивании наклоняются. Скорее всего, дизайнер намеренно использовал этот эффект, потому что он соответствует дружелюбному стилю приложения.

Проблема в том, что иногда мы встречаем разные drag-and-drop паттерны в рамках единого интерфейса. Возможно, вам приходилось сталкиваться с такими приложениями. К примеру, посмотрим на библиотеку доступных drag-and-drop паттернов в Salesforce. Там мы видим пять совершенно разных паттернов.

Доступные drag-and-drop паттерны Salesforce

И хотя эти паттерны очень хороши с точки зрения доступности (читайте мою статью об этом 👍🏻), к сожалению, в них мало согласованности, которая так важна в дизайне. В этих пяти паттернах мы видим пять разных курсоров и три маркера перетаскивания:

Но какая обозначает drag-and-drop? Ответ: все.

Какая иконка обозначает, что объект можно перетащить? Три полоски? Или три точки? А каким из пяти курсоров можно перетаскивать объекты? Представьте, что будет, если все пять паттернов использовать в одном интерфейсе?

Компоненты в рамках дизайн-системы должны восприниматься как единое целое. По аналогии, и drag-and-drop взаимодействия в интерфейсе должны быть согласованы.

Дизайн-система — это не только согласованные элементы интерфейса.  Процессы взаимодействия также должны быть согласованы.

Разбор кейса

Сейчас я расскажу вам, как разрабатывала drag-and-drop паттерны для дизайн системы Clarity (VMware). Clarity — дизайн система с открытым кодом, так что ею пользуются все желающие, а не только работники VMware.

Нашим пользователям нужна была функция drag-and-drop для некоторых компонентов интерфейса: древовидное меню, таблицы данных и карточки. Передо мной стояла задача — создать единый опыт взаимодействия по всем сценариям, связанным с drag-and-drop:

Сценарии взаимодействия с drag-and-drop:

Когда в интерфейсе большое количество данных (как раз случай VMware), без drag-and-drop не обойтись — он упрощает работу со сложными и массивными объемами информации.

Создаем библиотеку аффордансов

Для начала я создала небольшую библиотеку простых, но эффективных дизайн-аффордансов — свойств, которые будут обозначать drag-and-drop и связывать воедино этапы перетаскивания объектов. Когда появятся новые сценарии использования drag-and-drop, мы сможем применить к ним разработанные аффордансы.

Если вы с командой как раз создаете дизайн-систему, эта статья поможет вам при разработке ваших собственных drag-and-drop паттернов.

1. Лиловый цвет

Используйте для обозначения drag-and-drop взаимодействий определенный цвет, который не задействован в вашем дизайне. Не стоит использовать цвета, которые имеют определенное значение в дизайне (например, красный ассоциируется с разрушительными действиями).

Упорядочивание карточек

Для обозначения drag-and-drop мы выбрали лиловый. В Clarity он не является основным цветом, так что у пользователей он будет ассоциироваться только с drag-and-drop. Мы намеренно отказались от синего (обычно для drag-and-drop используют его), потому что в Clarity синие кнопки и другие кликабельные элементы.

2. Стили состояний

Определите стили для разных состояний перетаскиваемого элемента. Четко пропишите, как должен выглядеть элемент, когда пользователь его захватывает, перетаскивает и отпускает.

В Clarity к перетаскиваемому элементу применяются такие стили:

Изменение порядка элементов дерева

Благодаря небольшой тени создается впечатление, что элемент на самом деле перемещается над страницей.

Еще одно состояние, которое мы добавили — это исходное местоположение элемента на странице, которое мы называем “предыдущим положением”.

Перемещение из одной папки в другую в рамках дерева

Это напоминает пользователю, где перетаскиваемый элемент находился до этого.

Имейте в виду: мы не будем учитывать “предыдущее положение” при создании эффекта естественного движения (когда все окружающие элементы сдвигаются, уступая место перетаскиваемому объекту).

3. Системные курсоры

Системные курсоры подсказывают, что элемент можно перетаскивать. Это может показаться мелочью, но так пользователям гораздо проще обнаружить функции  drag-and-drop в интерфейсе.

Для маков мы используем курсоры захвата (открытая ручка Микки Мауса) и захваченного состояния (зажатая ручка Микки Мауса). Курсор захвата появляется при наведении мыши на элемент, который можно перетаскивать. Непосредственно при перетаскивании появляется курсор захваченного состояния. После перетаскивания пользователи снова будут видеть курсор захвата. Если перетаскиваемый объект нельзя перетащить в определенную область интерфейса, то при наведении на эту область курсор будет в недоступном состоянии.

Для Windows мы используем курсор перемещения (перекрещенные стрелки). Этот курсор появляется при наведении на объект, который можно перетаскивать, а также в процессе перетаскивания. Опять же, если пользователь попытается “бросить” объект в недоступную область, курсор будет в недоступном состоянии.

4. Место назначения объекта

Определите паттерн для обозначения мест назначения — областей, куда можно “бросить” захваченный объект. По аналогии со стилями, нужно четко прописать, как должны выглядеть места назначения.  

Поскольку в нашем случае пользователи будут менять объекты местами посредством drag-and-drop, мы обозначаем место назначения объекта линией.

Меняем местами ряды в таблице данных

Мы также добавили небольшой кружок с левого края линии, чтобы она не выглядела как обычная черта или граница. Это важная деталь — особенно для пользователей, которые плохо различают цвета. Если линию местоположения объекта выделить только цветом, эти пользователи могут ее не заметить.  

Аффордансы, которые зависят от ситуации

Единственное, что зависит от ситуации — это отображать маркер перетаскивания или нет. Маркеры перетаскивания — это небольшие иконки, которые показывают, что элемент можно перетаскивать. В интерфейсах Gmail в качестве маркера используют иконку из 12 точек, а мы выбрали иконку из 6 точек:

Когда маркер перетаскивания нужно отображать, а когда — нет? Это зависит от контекста. Если drag-and-drop доступен для элемента, который обычно нельзя перетаскивать, то обязательно нужно добавить маркер перетаскивания. А если drag-and-drop взаимодействие и так подразумевается, можно обойтись и без маркеров.

К примеру, в древовидном меню мы обошлись без маркеров, потому что и так очевидно, что пункты меню можно менять местами. А вот на карточках есть маркеры — потому что не все карточки можно перетаскивать.

Есть много разных иконок для обозначения маркеров перетаскивания. Нужно выбрать одну — и использовать ее везде.  

Одна большая drag-and-drop семья

Благодаря этим стандартам можно добиться согласованности между разными сценариями использования drag-and-drop.

Здесь вы можете посмотреть все сценарии использования drag-and-drop, о которых я рассказывала.  

Команда Clarity только начинает процесс разработки для всех этих drag-and-drop паттернов, начиная с упорядочивания колонок в таблице данных. Можете следить за процессом разработки на GitHub. 🎉

Источники

Образцы UX