Облачная палуба уходит к горизонту и медленно плывёт навстречу, как в иллюминаторе самолёта, а над ней в синем сумеречном небе тянутся перистые облака. Вид чуть покачивается, будто самолёт идёт по воздуху. Когда палец ведёт по экрану (или в вебе движется курсор), кадр плавно смещается с параллаксом; parallax={false} отключает это.
Шейдер считается целиком на GPU через Skia, время и сглаживание параллакса идут на UI-потоке Reanimated — React не перерисовывается на каждом кадре. Анимация замирает, когда включено «Уменьшение движения», приложение свёрнуто, передан paused или (в вебе) поверхность ушла за пределы экрана. Работает на iOS, Android и в вебе.
Поставьте зависимости:
npm install @shopify/react-native-skia react-native-reanimated react-native-gesture-handlerpnpm add @shopify/react-native-skia react-native-reanimated react-native-gesture-handleryarn add @shopify/react-native-skia react-native-reanimated react-native-gesture-handlerbun add @shopify/react-native-skia react-native-reanimated react-native-gesture-handlerСкопируйте эти файлы в src/shared/components/organisms/cloud-sea/:
Код доступен по подпискеPro
Исходник «Море облаков» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Проверьте алиас путей. Импорты в коде выше записаны так, как их пишет astra-rn add: @/shared/components, @/shared/utils и @/shared/hooks. Нужен алиас "@/*": ["./src/*"] в tsconfig.json — или поправьте импорты под свои пути.
Код доступен по подпискеPro
Исходник «Море облаков» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Компонент растягивается на размер родителя (flex: 1). Цвета принимают строку ("#2161fa") или тройку RGB от 0 до 1.
speed?Тип number
horizon?Тип number
parallax?Тип boolean
skyColor?Тип ShaderColor
zenithColor?Тип ShaderColor
cloudColor?Тип ShaderColor
shadowColor?Тип ShaderColor
deckColor?Тип ShaderColor
paused?Тип boolean
children?Тип ReactNode
style?Тип StyleProp<ViewStyle>