Temel ayarlar
Animasyonlar
Bu sayfa animasyon yığınını anlatır: kütüphane seçimi, sisteme bağlama, günlük kullanım ve genişletme. Tüm genel ayarlar src/config/animations.ts dosyasındadır.
Hangi kütüphaneyi kullanıyoruz
Motion (npm: motion) kullanıyoruz — Framer Motion’ın güncel halefidir. Pazarlama section’larında React bileşeni değil, DOM API’si (animate, inView) tercih edilir. Böylece .astro dosyaları statik HTML kalır; her blok için hydration gerekmez.
Açılır menü ve modallar src/components/ui/ içinde tw-animate-css kullanır — bu UI mikro animasyonudur; sayfa scroll/hero Motion’dan ayrıdır.
Sisteme nasıl uyguladık
Animasyon davranışı birkaç dosyaya bölündü. Motoru nadiren değiştirirsiniz; çoğunlukla config ve section dosyalarındaki HTML attribute’ları yeterlidir.
- src/config/animations.ts — enabled, süreler, scroll mesafesi, reduced motion
- src/lib/motion-presets.ts — fade-up, fade-in, expand-x keyframe’leri
- src/scripts/motion-init.ts — initMotion(): sayfa açılışında hero + scroll inView
- src/layouts/BaseLayout.astro — her sayfada initMotion çağrısı
- src/styles/core.css — [data-motion] öğeleri .motion-done olana kadar gizler (FOUC önleme)
Ayarlar: src/config/animations.ts
Önce bu dosyayı açın. enabled: false ile tüm Motion animasyonlarını kapatırsınız (içerik görünür kalır). Diğer alanlar varsayılan süreleri ayarlar; tek öğe data-motion-duration ile süreyi ezebilir.
export const animations = {
enabled: true,
respectReducedMotion: true,
hero: { duration: 1, distance: 40, initialDelayMs: 300 },
scroll: {
duration: 0.7,
distance: 24,
once: true,
margin: "0px 0px -15% 0px",
},
} as const;
- enabled — tüm Motion animasyonlarını aç/kapa
- respectReducedMotion — azaltılmış hareket varsa animasyon yok
- Süre / hız — bir sonraki bölüme bakın
Animasyon hızı
Hero ve scroll ayrı ayarlanır. Yalnızca src/config/animations.ts ve hero sırası için HeroSection-01.astro düzenlenir.
- Hero hızı — animations.ts: hero.duration (saniye), hero.initialDelayMs (başlamadan önce ms)
- Hero sırası — HeroSection-01.astro: her öğede data-motion-delay (saniye, örn. 0.3, 0.6, 0.9)
- Scroll hızı — animations.ts: scroll.duration, scroll.distance
- Tek kart yavaş? O öğeye data-motion-duration="1" ekleyin
- Çok hızlı mı? hero.duration artırın (örn. 1.2) veya data-motion-delay değerlerini büyütün
Section’larda nasıl kullanılır
Animasyon istediğiniz HTML öğesine attribute ekleyin. Section’ı React’e çevirmeyin. İki mod vardır:
- Sayfa açılışı (hero): data-motion-hero="fade-up|fade-in|expand-x"
- Scroll’da: data-motion="fade-up|fade-in|expand-x"
- İsteğe bağlı: data-motion-delay="0.2" (saniye, kartları sıraya koymak için)
- İsteğe bağlı: data-motion-duration="1" (saniye, config’i ezer)
- fade-in — yalnızca opacity; fade-up — fade + yukarı; expand-x — yatay çizgi
Örnek: hero (projede mevcut)
src/components/sections/hero/HeroSection-01.astro dosyasına bakın — rozet, başlık, çizgi, alt başlık ve CTA’larda data-motion-hero ve sıralı data-motion-delay vardır.
<span data-motion-hero="fade-in" data-motion-delay="0.3">Rozet</span>
<h1 data-motion-hero="fade-up" data-motion-delay="0.6">Başlık</h1>
<div data-motion-hero="expand-x" data-motion-delay="0.9" class="h-px w-20" />
Örnek: scroll ile görünme (projede mevcut)
src/components/sections/services/ServicesSection.astro — her kartta data-motion="fade-up" ve index * 0.1 gecikme ile sıralı giriş vardır.
{list.map((item, index) => (
<div
data-motion="fade-up"
data-motion-delay={(index * 0.1).toFixed(1)}
class="rounded-xl border p-6"
>
...
</div>
))}
Başka nerede kullanılır
Herhangi bir .astro section aynı attribute’ları kullanabilir. Ana sayfada uygun yerler: StatsSection (her istatistik), FaqSection-01 (başlık veya her soru), CtaSection-06 (iç kart), TrustBadgesSection, HowItWorksSection (adımlar).
Hizmet detay, Hakkımızda, İletişim: ana başlık veya içerik bloklarına data-motion ekleyin. LCP kritik sayfalarda hero gecikmelerini kısa tutun.
React adalarında (ör. TestimonialsSectionClient.tsx) yalnızca ada içi etkileşim gerekiyorsa motion/react kullanın — scroll fade için tüm Astro section’ı React’e sarmayın.
- Yeni preset? src/lib/motion-presets.ts içine case ekleyin
- Rehber sayfaları (/docs) genelde statik kalır — istenmedikçe ağır animasyon eklemeyin
İpuçları ve sorun giderme
- İçerik görünmüyor mu? Sert yenileme yapın; enabled: true ve konsol hatalarını kontrol edin
- Çok fazla animasyon performansı düşürür — satır satır değil, başlık ve kartları tercih edin
- İşletim sisteminde azaltılmış hareket açıkken test edin