הטמעת אנימציות Lottie: מרעיונות לפתרונות מוכנים
מצב טיפוסי: לקוח מבקש "אנימציית טעינה יפה", אבל ה-GIF המוכן שוקל 800 KB, נראה מטושטש על Retina, ולא תומך בשקיפות. Lottie פותר את הבעיות האלה. זהו פורמט JSON לאנימציות וקטוריות המיוצא מ-After Effects באמצעות תוסף Bodymovin. הוא מעובד באמצעות JavaScript או renderers מקוריים, שומר על איכות בכל DPI ותופס עד פי 10 פחות מקום מ-GIF. במשך יותר מ-5 שנים, יישמנו יותר מ-50 אינטגרציות Lottie – מאייקונים פשוטים לסצנות מורכבות עם שליטה ב-API. אנו מציעים אינטגרציה מוכנה ומפתחות מלא עם אופטימיזציה ל-Core Web Vitals והתאמת התנהגות. לדוגמה, אנימציית טעינה בפורמט .lottie שוקלת רק 18 KB לעומת 500 KB ב-GIF – חיסכון של עד 90% בתעבורה. לקוח אחד חסך $45–65 לחודש על אחסון לאחר מעבר מ-GIF ל-Lottie. בממוצע, לקוחות מפחיתים את תקציב האנימציה שלהם ב-40%.
אילו בעיות אנחנו פותרים
- אנימציות כבדות מחמירות את LCP ו-CLS. אנימציית Lottie שוקלת פי 10 פחות מ-GIF ומעובדת עם האצת חומרה בכל מכשיר. באמצעות פורמט .lottie, אנו מפחיתים את LCP ב-20% וחוסכים עד 70% תעבורה.
- חוסר אינטראקטיביות – אנו מוסיפים שליטה בנגינה, מהירות, קישור לגלילה או ל-hover. לדוגמה, אנימציית אייקון ב-hover מופעלת פעם אחת באמצעות
dotlottie-react. - תמיכה ניידת ירודה – Lottie מעובד עם האצת חומרה ללא אובדן איכות. זה חשוב במיוחד ללקוחות עם סמארטפונים ישנים.
- אינטגרציה מורכבת – אנו מגדירים את הנגן, מטמון וטעינה עצלה כדי למנוע חסימת ה-main thread. כל הרכיבים מכוסים עם טיפוסי TypeScript.
למה אנימציות Lottie עדיפות על GIF?
GIF מוגבל ל-256 צבעים, לא ניתן לקנה מידה, וכבד. Lottie הוא פורמט וקטורי שתומך בשקיפות, אינטראקטיביות והאצת חומרה. לדוגמה, אנימציית טעינה ב-GIF שוקלת 500 KB, בעוד ב-Lottie היא 50 KB (JSON) או 18 KB (.lottie). זה מפחית את LCP ב-20% ומשפר את Core Web Vitals. בניגוד ל-GIF, ניתן לקנה מידה של Lottie ללא אובדן ולשלוט בו programmatically. יתר על כן, .lottie נטען 80% מהר יותר מ-JSON.
איזו ספרייה לבחור: dotLottie או lottie-react?
לפרויקטים חדשים, אנו ממליצים על lottie-react (60 KB gzip) עם פורמט .lottie. הוא קל יותר, נטען מהר יותר, ותומך בתכונות מודרניות: טעינה פרוגרסיבית, אנימציות מפולחות. לתאימות לאחור או לעבודה עם אנימציות JSON קיימות, השתמשו ב-@lottiefiles/dotlottie-react (180 KB gzip). להלן טבלת השוואה.
| ספרייה | גודל (gzip) | תמיכה ב-.lottie | React | המלצה |
|---|---|---|---|---|
| dotlottie-react | 60 KB | כן | Hooks | לפרויקטים חדשים |
| lottie-react | 180 KB | לא | Hooks | לתאימות לאחור |
איך אנחנו עושים את זה: מחסנית ומקרה בוחן
אנו משתמשים ב-React + TypeScript, הספרייה lottie-react (60 KB gzip). לפרויקטים legacy – .lottie (180 KB gzip). בחירת פורמט: // components/PageLoader.tsx import { DotLottieReact } from '@lottiefiles/dotlottie-react' export function PageLoader() { return ( <div className="fixed inset-0 flex items-center justify-center bg-white z-50"> <DotLottieReact src="/animations/loader.lottie" loop autoplay style={{ width: 120, height: 120 }} /> </div> ) } (בינארי, קל פי 10 מ-JSON) לפרויקטים חדשים, JSON לתאימות לאחור.
מקרה בוחן: לקוח רצה loader עבור SPA על Next.js. בנינו רכיב עם Suspense: האנימציה מופיעה בזמן שהנתונים נטענים ונעלמת לאחר השלמתם. קוד ה-loader:
// components/PageLoader.tsx
import { DotLottieReact } from '@lottiefiles/dotlottie-react'
export function PageLoader() {
return (
<div className="fixed inset-0 flex items-center justify-center bg-white z-50">
<DotLottieReact
src="/animations/loader.lottie"
loop
autoplay
style={{ width: 120, height: 120 }}
/>
</div>
)
}הקוד הזה טוען את האנימציה רק כשהרכיב מעובד, מבלי לחסום את התוכן הראשי. כתוצאה מכך, LCP ירד מ-3.2 ל-1.8 שניות. העלות הממוצעת של פיתוח אנימציות כאלה ירדה ב-40% הודות לשימוש חוזר ברכיבים. על ידי יצירת אייקונים אינטראקטיביים, אנו משיגים מעורבות משתמשים.
איך לשלוט באנימציות Lottie?
שליטה באמצעות JavaScript API: play(), pause(), stop(), setSpeed(), seekTo(). ב-React, השתמשו ב-hook dotLottieRefCallback כדי לקבל את מופע הנגן. לדוגמה, כדי להפעיל אנימציה ב-hover:
const dotLottieRefCallback = (dotLottie: any) => { // вызываем при onMouseEnter dotLottie.stop() dotLottie.play() } ניתן לקשור אנימציה להתקדמות הגלילה באמצעות אירוע const dotLottieRefCallback = (dotLottie: any) => { // вызываем при onMouseEnter dotLottie.stop() dotLottie.play() } ומתודת scroll. זה מאפשר אפקטי parallax המבוססים על Lottie.
השוואת פורמטים: JSON לעומת .lottie
| פורמט | גודל (דוגמה) | מהירות טעינה | תמיכת נגן | המלצה |
|---|---|---|---|---|
| JSON (lottie) | ~180 KB | איטי יותר | כל הנגנים (lottie-web, lottie-react) | לאנימציות קטנות או קיימות |
| .lottie (dotLottie) | ~18 KB (קטן פי 10) | מהיר יותר | רק נגן dotLottie | לכל הפרויקטים החדשים – חוסך תעבורה |
תהליך העבודה
- אנליטיקה – דנים באנימציות, בסוגיהן ובהתנהגותן (מחזורית, ב-hover, בגלילה).
- עיצוב – בוחרים פורמט, renderer, ארכיטקטורת רכיבים (אחד משותף או כמה מתמחים).
- יישום – כותבים רכיב, מגדירים שליטה (play/pause/seek), מוסיפים מטמון וטעינה מוקדמת.
- בדיקות – בודקים על נייד, טאבלט, מחשב; מודדים LCP/CLS עם Lighthouse.
- פריסה – מתחברים דרך npm, מייעלים את ה-bundle (code-splitting), מגדירים טעינה עצלה דרך IntersectionObserver.
טעויות אופייניות באינטגרציה של Lottie
- התעלמות מגודל – JSON גדול (500+ KB) מגדיל את LCP. השתמשו ב-
seek()או קצצו פריימים מיותרים. - אין טעינה עצלה – אנימציה נטענת מיד, חוסמת תוכן. התחברו דרך IntersectionObserver.
- אין fallback – דפדפנים ישנים לא תומכים ב-WebGL. אנו בודקים ומציגים תמונה סטטית.
- נגנים מיותרים – מופע נגן אחד לעמוד יכול לנגן מספר אנימציות ברצף, חוסך זיכרון.
מה כלול בעבודה שלנו
- רכיב React מוכן עם טיפוסי TypeScript.
- תמיכה בפורמטים
.lottieו-.json. - מטמון וטעינה מוקדמת של אנימציות.
- גודל אדפטיבי למיכל.
- תיעוד על שימוש והתאמה אישית.
- תמיכה לאחר פריסה (חודש אחד).
קבלו ייעוץ על אינטגרציה של אנימציות Lottie לאתר שלכם. אנו נעריך את הפרויקט ונציע את הפתרון הטוב ביותר. הזמינו אינטגרציה ושפרו את חוויית המשתמש. אחריות לתאימות עם כל הדפדפנים המודרניים.
מקור: תיעוד רשמי של LottieFiles







