গাইড · 03

Animated কম্পোনেন্ট

এমন সাধারণ এলিমেন্ট রেন্ডার করুন যা লক্ষ্যের দিকে যায়, জেসচারে সাড়া দেয় আর সুন্দরভাবে চলে যায়।

Animated.<tag>

Animated.div, Animated.button, Animated.svg আর অন্য প্রতিটি HTML বা SVG ট্যাগ র‍্যাপার ছাড়া সাধারণ এলিমেন্ট রেন্ডার করে। এদের style মান গ্রহণ করে, আর transform React Native-এর মতো অ্যারে হতে পারে।

এই এলিমেন্টগুলোতে transform আর opacity-র সীমিত গতি, স্প্রিংসহ, ব্রাউজার চালাতে পারে।

উদাহরণ প্রস্তুত হচ্ছে…

seed, pose, poses আর tempo

seed প্রথম ফ্রেম, pose বর্তমান লক্ষ্য (অবজেক্ট বা poses-এর কোনো এন্ট্রির নাম), আর tempo timing বা স্প্রিং। শুধু tempo বদলালে না-বদলানো লক্ষ্য আবার চলে না।

এলিমেন্ট পৌঁছালে onRest চলে।

Card.jsx
<Animated.article
  seed={{ opacity: 0, transform: [{ translateY: 16 }] }}
  pose={selected ? 'raised' : 'rest'}
  poses={{
    rest: { opacity: 1, transform: [{ translateY: 0 }, { scale: 1 }] },
    raised: { opacity: 1, transform: [{ translateY: -8 }, { scale: 1.04 }] },
  }}
  tempo={{ spring: { stiffness: 300, damping: 26 } }}
  onRest={() => console.log('arrived')}
/>;

জেসচারে সাড়া

respond জেসচারকে অস্থায়ী লক্ষ্যে মেলায়: hover, focus, focusWithin, press, longPress, drag, inView আর অন্যান্য। সাড়া শেষ হলে এলিমেন্ট যেখানেই থাকুক সেখান থেকে নিজের pose-এ ফেরে।

onResponse প্রতিটি সাড়ার শুরু আর শেষ জানায়, আর respond={{ press: {} }} কোনো দৃশ্যমান পরিবর্তন ছাড়াই জেসচার অনুসরণ করে।

উদাহরণ প্রস্তুত হচ্ছে…

Animated.Scope দিয়ে ডিফল্ট ভাগ করুন

Animated.Scope ভেতরের Animated এলিমেন্টগুলোকে pose-এর নাম, tempo আর অ্যানিমেশনের ডিফল্ট দেয়।

Menu.jsx
<Animated.Scope tempo={{ spring: { stiffness: 380, damping: 30 } }}>
  <Animated.li pose={{ opacity: 1 }} />
  <Animated.li pose={{ opacity: 1 }} />
</Animated.Scope>;

নিজের কম্পোনেন্ট

Animated.wrap(Component) — React Native-এ createAnimatedComponent — ref এগিয়ে দেওয়া এবং একটি DOM এলিমেন্টে পরিণত হওয়া কম্পোনেন্টকে একই props গ্রহণ করতে সক্ষম করে।

Link.jsx
import { forwardRef } from 'react';
import { Animated } from '@kkwaenggwari/animated';

const Link = forwardRef((props, ref) => <a ref={ref} {...props} />);
const AnimatedLink = Animated.wrap(Link);

<AnimatedLink href="/pricing" respond={{ hover: { transform: [{ translateX: 4 }] } }} />;

খুঁজুন

ডকুমেন্টেশনে খুঁজতে টাইপ করুন।