Анімація перетягування (Drag & Reorder) у мобільних додатках

Хаотичне перетягування елементів дратує користувачів і знижує утримання. Ми проєктуємо та впроваджуємо анімацію перетягування під ключ — від ідеї до здачі. Скорочуємо час на сортування та робимо інтерфейс передбачуваним.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Анімація перетягування (Drag & Reorder) у мобільних додатках
Середній
від 1 дня до 3 днів
Часті запитання

Чому анімація перетягування елементів ламає інтерфейс

Анімація перетягування елементів — це місце, де інтерфейс найчастіше втрачає довіру користувача.

Збої drag and drop проявляються не в момент, коли палець веде картку, а через частки секунди після відпускання: елемент стає не туди, куди його поклали, сусідні рядки смикаються, а список з'їжджає вгору або вниз на довільну величину.

Користувач повторює жест, отримує той самий результат і закриває екран — завдання, заради якого він відкривав застосунок, залишилося невиконаним.

Втрата позиції списку — найдорожчий із цих збоїв. Вона виникає, коли візуальне зміщення елемента обчислюється окремо від моделі даних: інтерфейс уже переставив картку, а сховище ще зберігає старий порядок.

Під час наступного перемальовування список повертається до початкового стану, і правка зникає. Якщо такий екран — частина оформлення замовлення або налаштування, користувач втрачає не час, а результат роботи.

Підгальмовування анімації на довгих списках — друга за частотою причина. Поки елементів десяток, перетягування в мобільному застосунку відбувається плавно; на сотнях рядків кожен кадр перераховує позиції всіх сусідів, і жест починає відставати від пальця.

Далі спрацьовує захист системи: вона надає пріоритет прокручуванню, і картка «прилипає» до екрана замість того, щоб слідувати за рукою.

Окрема категорія — стрибки під час відпускання. Елемент піднімається над списком з однією швидкістю, а стає на місце з іншою, бо анімація повернення й анімація перебудови запускаються незалежно. Візуально це читається як збій, навіть коли дані в порядку.

Усі три збої лікуються не «красивішою» анімацією, а розведенням шарів: жест, модель порядку й відмальовування мають оновлюватися узгоджено. Нижче розбираємо, як це закривається на рівні архітектури екрана.

Що дає коректна анімація перетягування

Відгук інтерфейсу та поріг спрацьовування

Анімація перетягування елементів починається не з руху, а з розпізнавання жесту: утримання 300–500 мс відокремлює навмисне переміщення від звичайного вертикального скролу.

Якщо поріг не налаштований, список «залипає» під час спроби прокрутити, а елемент зривається з місця при випадковому дотику. Ми калібруємо затримку та допуск зсуву під конкретний сценарій — картки, пункти меню, рядки таблиці — і хибні спрацьовування зникають.

Збереження порядку елементів

Порядок після перетягування має фіксуватися в моделі даних, а не лише в розмітці. Інакше при перезапуску або синхронізації список відкочується до початкового стану.

Ми записуємо нову позицію одразу після завершення жесту та підтверджуємо її на сервері, тому сортування залишається стабільним між сесіями та пристроями.

Продуктивність списку

Довгий список із перетягуванням просідає, якщо при кожному зсуві перемальовуються всі рядки. Перебудова лише зачепленого діапазону та повторне використання комірок тримають відгук рівним на списках у сотні елементів — без просідань при прокручуванні під час перетягування.

Варіант Коли підходить Обмеження
Довге утримання Списки з прокручуванням Потрібна підказка користувачеві
Ручка-захват Щільні інтерфейси Займає місце в рядку
Довге утримання + ручка Змішані сценарії Складніше в налаштуванні порогів

Ми працюємо на нативних механізмах платформи та Reanimated для плавних переходів — анімація йде поза основним потоком відмалювання, тому інтерфейс не блокується під час жесту.

Як ми впроваджуємо анімацію перетягування: етапи

Впровадження починається не з коду, а з розбору поточної поведінки списку: де елемент «залипає» під пальцем, на якій швидкості прокручування жест конфліктує зі скролом, що відбувається з довгим натисканням.

На цьому етапі фіксуємо сценарії — сортування в межах одного списку, перенесення між колонками, скасування перетягування, — тому що від їхньої кількості залежить архітектура стану, а не лише анімація.

Далі працюємо ітеративно, з перевіркою на живих пристроях після кожного кроку:

  1. Аудит інтерфейсу та сценаріїв. Розбираємо наявні списки, збираємо карту жестів і конфліктів: де перетягування перетинається з прокручуванням, свайпом видалення, контекстним меню за довгим натисканням.
  2. Схема взаємодії. Фіксуємо модель даних і стан: що відбувається з елементом у момент захоплення, як поводиться список під ним, куди повертається елемент при скасуванні. Це знімає більшість багів до написання коду.
  3. Налаштування жестів. Задаємо поріг спрацювання, час довгого натискання, поведінку при утриманні біля краю екрана та швидкість автопрокручування. Поріг підбираємо так, щоб звичайний скрол не перетворювався на перетягування.
  4. Реалізація анімації. Пов'язуємо позицію елемента з пальцем напряму, а решту елементів зсуваємо пружинною анімацією — так рух залишається передбачуваним і не «смикається» на слабких пристроях.
  5. Перевірка на пристроях. Прогоняємо сценарії на різних розмірах екрана, частотах оновлення та версіях системи: перетягування в довгому списку, біля краю, з перериванням жесту, при повороті екрана.
  6. Оптимізація відрисовки. Прибираємо зайві перерисовки списку під час жесту, щоб прокручування та анімація не конкурували за кадри.
  7. Передача рішень. Віддаємо документацію щодо жестів, параметрів і крайових випадків, щоб команда замовника могла розвивати поведінку списку без нас.

Кожен етап закінчується демонстрацією на реальному пристрої, а не звітом. Опишіть вашу задачу — повернемося з оцінкою та планом за етапами.

Чим відрізняється перетягування з утриманням від свайпу?

Це два різних жести з різною механікою розпізнавання. Свайп по елементу — це безперервний рух пальця по екрану, який система зчитує одразу: вектор зміщення, швидкість, прискорення.

Утримання — це пауза перед дією: палець стоїть на місці довше порогу, і лише після цього елемент «відклеюється» від списку і починає слідувати за пальцем.

Поріг утримання підбирається так, щоб короткий дотик для прокручування не перетворювався на захоплення, а усвідомлене натискання спрацьовувало передбачувано.

Свайп добрий там, де дія однозначна і незворотна: змахнути сповіщення, позначити лист прочитаним, видалити рядок. Він швидкий, але не дає точності — палець іде вбік, а елемент уже полетів.

Сценарії сортування потребують іншого: користувач повинен бачити, що саме він тримає, куди тягне і де елемент стане.

Тут працює саме утримання — воно відокремлює намір «переставити» від випадкового змахування і дає візуальний зворотний зв'язок: підйом елемента, тінь, підсвічування цільової позиції.

Головна складність — конфлікт жестів. Список уже слухає вертикальне прокручування, а утримання претендує на той самий дотик. Якщо не розвести їх за часом і напрямком, користувач або не може прогорнути список, або випадково зриває елемент при спробі прокручування.

Вирішується це пріоритетом розпізнавачів: прокручування забирає жест, поки палець рухається, утримання перехоплює, якщо палець завмер. Додатково обмежують зону захоплення — наприклад, тільки за «ручку» праворуч, а не за все поле рядка.

Вибір моделі взаємодії — це не про красу анімації, а про те, скільки помилок користувач зробить. Утримання з чітким порогом і зрозумілим зворотним зв'язком знижує частку випадкових перестановок, але вимагає, щоб елемент візуально підтверджував захоплення в перші частки секунди. Свайп без підтвердження швидший, але прощає менше — при найменшій неточності дія йде не туди.

На практиці моделі комбінують: свайп залишають для швидких одиночних дій, утримання — для сортування і групових операцій. Ключ у тому, щоб жести не перетиналися за зоною і за часом спрацьовування, а стан захоплення було видно користувачеві до того, як він відпустить палець.

Кейс: сортування списку завдань без втрати позиції

Замовник прийшов із застосунком для керування завданнями: список із кількох сотень позицій, ручне сортування пріоритетів. Скарга звучала розмито — «іноді картка не стає куди треба».

Ми зняли метрики на реальних сценаріях: частка успішних перетягувань трималася на рівні 71%, середній час відгуку на захоплення картки — близько 180 мс, а в підтримку стабільно надходило 40-60 звернень на місяць із формулюванням «сортування збилося» або «завдання зникло зі списку».

Що було не так

Корінь виявився не в анімації, а в моделі стану. Список перемальовувався повністю на кожен рух пальця, а позиція фіксувалася лише за подією відпускання.

Якщо палець виходив за межу видимої області або система переривала жест вхідним сповіщенням, зміна відкочувалася мовчки — користувач бачив, що картка «стрибнула назад», і повторював дію. Звідси й звернення: люди не розуміли, збереглося сортування чи ні.

Що змінили

Розділили жест і дані: під час перетягування рухається лише візуальний шар, а порядок у сховищі оновлюється один раз — після завершення, з підтвердженням. Додали поріг спрацювання за зміщенням і «магніт» до найближчої позиції, щоб картка не зависала між рядками.

Автопрокрутку біля країв екрана прив'язали до швидкості руху пальця, а перерваний жест тепер не відкочується, а доводиться до найближчої валідної позиції.

Метрики після

Показник До Після
Успішні перетягування 71% 96%
Час відгуку на захоплення ~180 мс ~40 мс
Звернення в підтримку 40-60 на місяць поодинокі

Окремо перевірили поведінку на слабких пристроях і під час перемикання між екранами — стан сортування переживає згортання застосунку. Логіку жестів побудували на нативних механізмах платформи, тому анімація залишається плавною без ручної синхронізації кадрів.

React Native Gesture Handler

Сумніви перед впровадженням: сумісність і відкат

Перед стартом зазвичай запитують одне й те саме: чи не доведеться переписувати екрани і що буде, якщо анімація перетягування елементів конфліктує з уже працюючими жестами — свайпом між вкладками, горизонтальним прокручуванням каруселі, системним «назад».

Конфлікти реальні, але вирішуються на рівні розпізнавання жестів: довге натискання з порогом спрацювання забирає перетягування собі, а інші розпізнавачі отримують пріоритет за осями.

Якщо екран уже на нативній верстці або на кросплатформному шарі, порядок не змінюється — змінюється лише спосіб підключення.

Що якщо екран на іншій технології? Перетягування не вимагає переписувати екран повністю: шар з анімацією ставиться поверх наявної верстки, а логіка порядку елементів залишається в поточному стані застосунку. Міграція йде по одному екрану, а не релізом.

Як відкочуємося? Анімація і логіка порядку ізольовані за перемикачем: якщо на пристрої або в збірці щось поводиться нестабільно, перемикач повертає попередню поведінку списку без відкату всього релізу. План відкату фіксуємо до початку робіт, а не після.

Що з доступами? Потрібен доступ до репозиторію з правом на гілку і до середовища збірки — цього достатньо, щоб збирати і перевіряти зміни. Доступи оформлюються на конкретних інженерів і закриваються після завершення.

Наскільки це сумісно з поточним стеком і що буде з уже випущеними версіями?

Сумісність перевіряємо на вашій актуальній гілці до оцінки: дивимося, як влаштовані списки і обробка жестів, і підбираємо спосіб підключення під них, а не навпаки.

Уже випущені версії не ламаються — нова поведінка приходить у наступному оновленні, а перемикач відкату залишається доступним і після релізу.

Що замовник отримує на руки:

  • конфігурації підключення перетягування під кожен тип екрана;
  • схему пріоритетів жестів — що і коли перехоплює дотик;
  • план відкату з описом перемикача і умов спрацювання;
  • документацію щодо жестів: пороги, тайминги, поведінку на межах списку;
  • інструкцію щодо доступів до репозиторію і середовища збірки;
  • набір перевірок на конфлікти з прокручуванням і системними жестами;
  • запис передачі конфігурацій вашій команді.

Опишіть задачу — повернемося з оцінкою і планом: покажемо, як перетягування ляже на ваші екрани і де пройде межа відкату.

Терміни впровадження анімації перетягування за етапами

Впровадження анімації перетягування елементів рідко буває одним завданням — це послідовність кроків, де кожен наступний спирається на результат попереднього. Нижче — орієнтовні терміни за етапами для типового застосунку зі списками, картками або канбан-дошкою.

Тривалість залежить від кількості екранів із перетягуванням, стану даних і вимог до збереження порядку.

Що впливає на термін. Чим більше екранів і типів списків, тим довша реалізація — кожен потребує окремого налаштування точок скидання та анімації.

Якщо порядок елементів зберігається лише на пристрої, етап синхронізації скорочується; за спільної дошки для кількох користувачів додається обробка одночасних правок.

Як відбувається перевірка. Графік перевірки будуємо за етапами: після прототипу дивимося саму механіку жесту, після реалізації — плавність і поведінку на краях списку, на прийманні — збереження порядку після перезапуску. Правки вносимо ітераціями, не чекаючи фіналу.

Точні терміни називаємо після розбору ваших екранів — опишіть завдання, і ми повернемося з оцінкою та планом робіт.

Наші компетенції:

Останні роботи

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1010
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    903
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1332
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1180
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1107
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    714