Фон карточки — живой шейдер Skia, похожий на струящийся шёлк. Карточка пружинно наклоняется к пальцу при перетаскивании или к курсору при наведении в вебе, по поверхности скользит блик, а складки ткани тянутся за точкой касания. Если передать другую палитру или seed, цвета и узор плавно перетекают в новые, без резкой смены кадра.
Шейдер считается на GPU, время идёт на UI-потоке Reanimated, поэтому React не перерисовывается на каждом кадре. Течение замирает, когда включено «Уменьшение движения», приложение свёрнуто или (в вебе) карточка ушла за пределы экрана. Работает на iOS, Android и в вебе.
Поставьте зависимости:
npm install @shopify/react-native-skia react-native-gesture-handler react-native-reanimatedpnpm add @shopify/react-native-skia react-native-gesture-handler react-native-reanimatedyarn add @shopify/react-native-skia react-native-gesture-handler react-native-reanimatedbun add @shopify/react-native-skia react-native-gesture-handler react-native-reanimatedСкопируйте эти файлы в src/shared/components/organisms/silk-card/:
Код доступен по подпискеPro
Исходник «Шёлковая карточка» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Проверьте алиас путей. Импорты в коде выше записаны так, как их пишет astra-rn add: @/shared/components, @/shared/utils и @/shared/hooks. Нужен алиас "@/*": ["./src/*"] в tsconfig.json — или поправьте импорты под свои пути.
Код доступен по подпискеPro
Исходник «Шёлковая карточка» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Содержимое кладётся в children поверх шёлка, скругление задаётся borderRadius.
colors?Тип readonly [string, string, string]
seed?Тип number
tilt?Тип number
speed?Тип number
crease?Тип number
zoom?Тип number
borderRadius?Тип number
children?Тип ReactNode
style?Тип StyleProp<ViewStyle>