-
Notifications
You must be signed in to change notification settings - Fork 185
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Feature]: Дать возможность определять, панель была отрисована с анимацией перехода вперед или назад #4981
Comments
Конкретно этот кейс нельзя ли запомнить на уровне приложения как состояние? |
Из панели с анимацией можно выйти и зайти по-новой, тогда должно воспроизодиться опять. Это довольно абстрактный пример. Вообще на практике часто бывает, что при повторном заходе на панель надо сделать что-то заново (например, перезапросить данные страницы), но важно различать случаи возврата к панели назад, в этом случае надо просто восстановить состояние. Еще один пример: страница с формой редактирования профиля. Если идешь глубже по панелям и возвращаешься, драфт сохраняется. Но если выходишь из панели а потом опять открываешь форму - очищается. |
Да и этот хук, позволяющий определить маунт панели вперед/назад мог бы помочь сделать механизм ScrollSaver для кастомных блоков c overflow scroll. См задачу https://github.com/VKCOM/VKUI/issues/3750 |
А если рассмотреть параметр const handleSwipeBackStart = (activePanel) => {
if (activePanel === "some-panel") {
// меняем состояние
}
};
<View onSwipeBaskStart={handleSwipeBackStart}>
<Panel id="some-panel">
{/* проверяем состояние */}
</Panel>
</View> UPD |
Мы можем расширить API interface View {
/**
* Вызовется до начала анимации
*
* Если анимации отключены, то вызовется сразу.
*/
onPanelEnter(prevPanel: null | string, nextPanel: null | string) {}
/**
* Вызовется после окончания анимации (полезно, если надо дождаться окончательного монтирования)
*
* Если анимации отключены, то вызовется сразу.
*/
onPanelEntered(prevPanel: null | string, nextPanel: null | string) {}
/**
* Вызовется до начала анимации
*
* Если анимации отключены, то вызовется сразу.
*/
onPanelExit(prevPanel: null | string, nextPanel: null | string) {}
/**
* Вызовется после окончания анимации (полезно, если надо дождаться окончательного монтирования).
*
* Если анимации отключены, то вызовется сразу.
*/
onPanelExited(prevPanel: null | string, nextPanel: null | string) {}
} то тогда можно будет для всех платформ реализовать. |
Было бы полезно, я бы смог с помощью этого апи сделать себе желаемый трюк, но частично. Но еще хочется учитывать переход между панелями вперед/назад между разными вью. Визуально оно тоже выглядит как поход вглубь/наружу (анимация вью вверх/вниз). |
inomdzhon Мне очень нравится поинт-аргумент, что нам важно понимать с какой анимацией была открыта данная панель: вперед или назад. Ведь именно по этому принципу мы бы могли сами реализовать, например, scrollSaver блоков со своим overflow scroll. Вот вроде анимация у тебя под носом воспроизводится, но программно ты не понимаешь, какая она была |
@shevchux Леонид, привет! А ты не пробовал использовать
|
Привет. Пробовали, отчасти получалось, да. Но возможны переходы между панелями, которые лежат в разных вью (внутри рута), а там похожего коллбека уже нет. UPD: О, уже появился в Root. Да, можно попробовать. Можешь уточнить, эти колбеки срабатывают До перехода? |
Этот коллбэк срабатывает после перехода. |
Спасибо, тогда я должен суметь решить свою задачу. Тогда вопрос лишь в том, не уместно ли дать удобный инструмент (типа хука) из коробки? |
Хорошая идея. Мы подумаем над этим. |
@shevchux Я правильно понимаю, что тебе нужен хук не только для View но и для Root? |
Описание
Бывает, что некоторые эффекты на панелях нужно исполнять только тогда, когда ты переходишь на нее вперед по истории. Если ты из нее идешь к более глубокой панели, а потом возвращаешься назад, то эффект исполнять не надо.
Дать возможность определять, панель была отрисована с анимацией перехода вперед или назад. Можно сделать хуком.
Конкретный пример:
При открытии панели с помощью навигации вперед мы однократно проигрываем welcome lottie-анимацию. Из этой панели можно провалиться в более глубокую, а потом вернуться назад. При возврате назад происходит новый рендер панели, но хотелось бы его уметь отличать, так как это просто возврат назад -- воспроизводить welcome lottie-анимацию уже не надо, сразу показывать ее на последнем кадре.
Скриншоты
No response
The text was updated successfully, but these errors were encountered: