مطالعات موردی انیمیشن های اسکرول محور

سوئتا گوپالاکریشنان
Swetha Gopalakrishnan
ساوراب راجپال
Saurabh Rajpal

انیمیشن های اسکرول محور یک الگوی UX رایج در وب هستند. یک انیمیشن اسکرول محور به موقعیت اسکرول یک ظرف اسکرول مرتبط است. این بدان معنی است که با اسکرول کردن به بالا یا پایین، انیمیشن پیوند داده شده در پاسخ مستقیم به جلو یا عقب می رود. نمونه‌هایی از این افکت‌هایی مانند تصاویر پس‌زمینه اختلاف منظر یا نشانگرهای خواندن هستند که در حین حرکت حرکت می‌کنند.

توسعه دهندگان معمولاً با استفاده از جاوا اسکریپت برای پاسخ دادن به رویدادهای اسکرول در رشته اصلی، انیمیشن های اسکرول-محور ایجاد می کنند. این امر باعث می‌شود که ایجاد انیمیشن‌های اسکرول‌محور عملکردی که با پیمایش همگام هستند، دشوار باشد، زیرا رویدادهای اسکرول به‌صورت ناهمزمان ارائه می‌شوند، و اغلب به دلیل قرار گرفتن در رشته اصلی منجر به jank می‌شود.

با این حال، به‌عنوان بخشی از ویژگی‌های جدید CSS و UI که در مرورگرها فرود می‌آیند ، اکنون می‌توانید انیمیشن‌های پیمایش محور اعلامی ایجاد کنید. با Scroll Timelines و View Timelines، مفاهیم جدیدی که با Web Animations API (WAAPI) و CSS Animations API ادغام می‌شوند، اکنون می‌توانید انیمیشن‌های اسکرول‌محور ابریشمی و صافی داشته باشید که تنها با چند خط کد از رشته اصلی خارج می‌شوند. در این مطالعه موردی، کشف کنید که چگونه Tokopedia، redBus، و Policybazaar در حال حاضر از این ویژگی جدید سود می برند.

پشتیبانی مرورگر

  • 115
  • 115
  • ایکس

منبع

توکوپدیا

توکوپدیا پیاده‌سازی‌های جاوا اسکریپت سفارشی قبلی خود را با انیمیشن‌های Scroll-driven جایگزین کرد تا عملکرد صفحه خود را بهینه کند و تجربه کلی مرور را در قیف تبدیل تجارت الکترونیکی خود بهبود بخشد.

ما موفق شدیم تا 80٪ از خطوط کد خود را در مقایسه با استفاده از رویدادهای اسکرول معمولی جاوا اسکریپت کاهش دهیم و مشاهده کردیم که میانگین استفاده از CPU از 50٪ به 2٪ در حین پیمایش کاهش یافته است - Andy Wihalim ، مهندس ارشد نرم افزار، Tokopedia

قابلیت مشاهده متحرک در حال تغییر نوار چسبنده بالا بر اساس موقعیت اسکرول کاربر.

کد

پیاده سازی زیر از تابع scroll() برای تنظیم جدول زمانی پیشرفت اسکرول ناشناس برای کنترل پیشرفت انیمیشن CSS استفاده می کند. قابلیت مشاهده نوار چسبنده بالا بر اساس موقعیت اسکرول در محدوده animationRange تعریف شده تغییر می کند.

const toggleBar = keyframes({
  to: { height: 48 },
});

export const cssWrapper = css({
  position: 'fixed',
  left: 0,
  width: '100vw',
  pointerEvents: 'none',
  marginTop: 120,
  height: 0,
  overflow: 'hidden',
  display: 'flex',
  flexDirection: 'column',
  justifyContent: 'flex-end',
  animation: `${toggleBar} linear both`,
  animationTimeline: 'scroll()',
  animationRange: '20px 70px',
});

redBus

redBus دارای انیمیشن‌های مختلفی برای موبایل و دسکتاپ در صفحه فرود کارهایشان است که در اوایل قیف تبدیل به همه کاربران نشان داده می‌شود. با انیمیشن های اسکرول محور، آنها توانستند این پیاده سازی های جاوا اسکریپت سفارشی را با CSS جایگزین کنند تا به همان اثر دست یابند.

موارد استفاده کنید

گالری عکس با Image Reveal (برای موبایل) و Cover Flow (برای دسکتاپ).

تصویر انیمیشن پیمایشی جلوه ای را برای بارگذاری تصاویر در گالری عکس redBus "Things To Do" نشان می دهد.

کد (موبایل)

در مثال قبلی، Tokopedia از جدول زمانی پیشرفت پیمایش ناشناس استفاده کرد. در کد زیر، redBus از جدول زمانی پیشرفت view با نام استفاده می‌کند. انیمیشن opacity و clip-path عنصر <img> را در animation-range تعریف شده در نزدیکترین پیشینگر اجداد عنصر، که در این مورد پیمایش گالری عکس است، تغییر می دهد.

const reveal = keyframes`
   from {
       opacity: 0;
       clip-path: inset(45% 20% 45% 20%);
   }
   to {
       opacity: 1;
       clip-path: inset(0% 0% 0% 0%);
   }`

const CardImage = styled.div`
   width: 100%;
   height: 100%;
   img {
       border-top-left-radius: 0.75rem;
       border-top-right-radius: 0.75rem;
       height: 100%;
       width: 100%;
       object-fit: cover;
       view-timeline-name: --revealing-image;
       view-timeline-axis: block;
  
       /* Attach animation, linked to the  View Timeline */
       animation: linear ${reveal} both;
       animation-timeline: --revealing-image;
  
       /* Tweak range when effect should run*/
       animation-range: entry 25% cover 50%;
   }
`;

ما بسیار خوشحالیم که این ویژگی را می بینیم زیرا ترکیبی عالی از عملکرد با تجربه بهتر است و سیگنال های تجربه صفحه ما را برای SEO تقویت می کند. علاوه بر این، حداقل منحنی یادگیری آن را برای هر وب سایت تجارت الکترونیکی ضروری می کند. ما همچنین بازخورد مثبت و پشتیبانی از تیم‌های دیگر دریافت کردیم تا از SDA برای سفرهای کاربر بیشتر استفاده کنیم.- آمیت کومار ، مدیر ارشد مهندسی، redBus .

بازار سیاست

مقایسه طرح های بیمه یک اقدام کلیدی مکرر است که توسط کاربران برای هدایت فرآیند تصمیم گیری آنها انجام می شود. با استفاده از انیمیشن های اسکرول محور، Policybazaar اندازه عناصر با اولویت پایین را در پاسخ به کاربر که جدول را پیمایش می کرد، کاهش داد. این منجر به یک تجربه پیمایش زیبا و در عین حال بهبود خوانایی شد.

با انیمیشن‌های پیمایشی، می‌توانستیم فضای درگاه دید را برای مقایسه برنامه‌ها برای کاربر به حداکثر برسانیم، و از تجربه خواندن متمرکز و بدون درهم‌تنگی اطمینان حاصل کنیم.— Rishabh Mehrotra ، رئیس بخش طراحی بیمه عمر BU، PolicyBazaar .

انیمیشن اسکرول محور animate-timeline در جدول مقایسه طرح در سرمایه گذاری و زندگی LOB (خط کسب و کار).

کد

مشابه مثال قبلی از Tokopedia، Policybazaar از تابع scroll() برای تنظیم جدول زمانی پیشرفت اسکرول ناشناس برای کنترل پیشرفت انیمیشن CSS استفاده می کند. در این حالت، اندازه فونت کوچک می شود و هدر بر اساس موقعیت اسکرول در animation-range تعریف شده محو می شود.

@supports (animation-timeline: scroll()) {
.plan-comparison .inner-header {
animation: move-and-fade-header linear both;
}
.plan-comparison .left-side {
animation: shrink-name linear both;
}
.plan-comparison .inner-header, .plan-comparison .left-side {
animation-timeline: scroll();
animation-range: 0 150px;
}
}

@keyframes move-and-fade-header {
  to {
    translate: 0% -5%;
    top:103px;
}
}

@keyframes shrink-name {
  to {
    font-size: 1.5rem;
  }
}

انیمیشن های اسکرول محور به عنوان یک الگوی رایج در طول سفر کاربر

همه شرکت‌های تجارت الکترونیک برجسته از انیمیشن‌های اسکرول محور در صفحات دارای کارت، کارت‌های متحرک استفاده می‌کردند تا توجه کاربر را به آنها جلب کنند. مثال‌های زیر افکت‌های اسکرول روی کارت‌ها را در بخش‌های مختلف سفر کاربر نشان می‌دهند. این معمولاً با استفاده از جدول زمانی پیشرفت نمای ناشناس برای کنترل پیشرفت انیمیشن CSS سفارشی، همانطور که در قطعه CSS زیر نشان داده شده است، به دست می آید.

@keyframes animate-in {
 0% { opacity: 0; transform: translateY(10%); }
 100% { opacity: 1; transform: translateY(0); }
}

@keyframes animate-out {
 0% { opacity: 1; transform: translateY(0); }
 100% { opacity: 0; transform: translateY(-10%); }
}

.flyin_animate {
   animation: animate-in linear forwards;
   animation-timeline: view();
   animation-range: entry;
}

redBus (صفحه اصلی)

انیمیشن اسکرول محور افکت fly-in برای بارگیری کارت های محصول در صفحه فرود RedBus "Things To Do".

Policybazaar (صفحه فهرست محصولات)

انیمیشن اسکرول محور محو می شود، محو کارت های محصول در سرمایه گذاری و زندگی LOB (خط کسب و کار).

توکوپدیا (صفحه جزئیات محصول)

انیمیشن Fade-in، Fade-out هنگام پیمایش در محصولات لیست شده.

مواردی که باید هنگام استفاده از Scroll-driven Animations API در نظر بگیرید

این امکان وجود دارد که انیمیشن های اسکرول محور را برای مرورگرهایی که پشتیبانی نمی کنند، به عنوان مثال با Scroll-timeline polyfill پر کنید. اگر این کار را انجام دهید، به آزمایش بیشتری نیاز دارد تا مطمئن شوید که در کنار چارچوب شما به خوبی کار می‌کند، و مرورگرهایی که از polyfill استفاده می‌کنند با شکست انیمیشن یا تجربه‌های ناهنجار مواجه نمی‌شوند.

از CSS می‌توانید از @supports برای تست پشتیبانی از انیمیشن-زمان‌لاین قبل از استفاده از انیمیشن‌های اسکرول‌مدار استفاده کنید. مثلا:

@supports (animation-timeline: scroll()) {

}

منابع

سایر مقالات این مجموعه را بررسی کنید که در مورد چگونگی بهره مندی شرکت های تجارت الکترونیک از استفاده از ویژگی های جدید CSS و UI مانند View Transitions، Popover، Container Queries و has() Selector صحبت می کند.