چرا از انیمیشن های جاوا اسکریپت استفاده می کنیم؟

انیمیشن ها صفحات استاتیک را به تجربیات پویا تبدیل می کنند.آنها چشم کاربر را به عناصر مهم هدایت می کنند، بازخورد فوری در مورد تعاملات ارائه می دهند، و شخصیت مارک را به خوبی بارگذاری می کنند، یک ابزار به ظاهر صاف ظاهر می شوند، یا یک اثر ظریف می تواند یک رابط را فعال کند و واکنش نشان دهد فراتر از زیبایی شناسی، قابلیت های انیمیشن بهبود یافته توسط روشن کردن تغییرات دولتی - به عنوان مثال، یک دکمه اسکرول که به طور واقعی انعطاف پذیری نوار را قادر می کند تا یک فرم نوار صوتی را از طریق یک منوی سمت کاربر تغییر دهد تا یک حرکت نوار صوتی یا تغییر دهد تا یک حرکت دهد تا یک رابط کاربر را به ایجاد کند تا یک حرکت عکس العمل به یک نوار صوتی را از طریق یک رابط کاربر را به یک رابط کاربر را به یک رابط کاربری عکس العمل نشان دهد.

تکنیک های انیمیشن جاوا اسکریپت محبوب

هر تکنیک تعادل متفاوتی از سادگی، عملکرد و کنترل را ارائه می دهد. درک معاملات کمک می کند تا ابزار مناسب برای پروژه خود را انتخاب کنید.

انتقال CSS و Transforms

CSS انتقال می دهد تغییر ویژگی های بی طرف هنگامی که توسط یک اضافه کردن کلاس یا تغییر سبک ایجاد می شود، همراه با شنوندگان رویداد جاوا اسکریپت، شما می توانید تعاملات ساده اما موثر ایجاد کنید.به عنوان مثال، تغییر یا [FLT 1 ملک در شناور یا کلیک:

const button = document.querySelector('.cta');
button.addEventListener('mouseenter', () => {
 button.style.transform = 'scale(1.1)';
});
button.addEventListener('mouseleave', () => {
 button.style.transform = 'scale(1)';
});

انتقال CSS سخت افزاری است که هنگام استفاده از خواص مانند (FLT 3: و ، آنها را برای اثرات ساده ایده آل می کند.

درخواست AnimationFrame

برای کنترل سفارشی، فریم به فریم، منطق انیمیشن خود را با چرخه رنگ مرورگر همگام سازی می کند، این پایه برای بسیاری از کتابخانه های انیمیشن است و برای بوم یا انیمیشن های WebGL ضروری است. این روش به طور مکرر یک تابع callback نامیده می شود، عبور یک زمان با وضوح بالا برای محاسبه پیشرفت استفاده می شود.

const box = document.querySelector('.box');
let start = null;

function animate(timestamp) {
 if (!start) start = timestamp;
 const progress = timestamp - start;
 box.style.transform = `translateX(${Math.min(progress / 5, 300)}px)`;
 if (progress < 1500) {
 requestAnimationFrame(animate);
 }
}

requestAnimationFrame(animate);

به طور خودکار مکث زمانی که تب غیر فعال است، صرفه جویی در باتری و CPU اسناد برای الگوهای استفاده پیشرفته مانند تر و لغو.

GSAP (GreenSock Animation Platform)

GSAP یک کتابخانه بالغ و با عملکرد بالا است که توالی های پیچیده، جدول زمانی و کاهش بی وقفه را کنترل می کند، در تمام مرورگرهای کار می کند و افزونه هایی را برای انیمیشن های اسکرول شده، مورفینگ SVG و بیشتر ارائه می دهد.

gsap.to('.box', { duration: 1, x: 300, rotation: 360, ease: 'power2.out' });

ویژگی جدول زمانی GSAP به شما اجازه می دهد تا چندین انیمیشن را با زمان دقیق زیر به هم متصل کنید:

const tl = gsap.timeline();
tl.to('.box', { duration: 0.5, scale: 2 })
 .to('.box', { duration: 0.5, rotation: 90 })
 .to('.box', { duration: 0.5, scale: 1, rotation: 0 });

سایت رسمی GSAP [FLT 1] مستندات گسترده و اکوسیستم پلاگین برای نیازهای پیشرفته مانند انیمیشن های اسکرول محور فراهم می کند.

Anime.js

Anime.js یک جایگزین سبک با یک API تمیز و زنجیره ای است. آن را از خواص CSS، SVG، ویژگی های DOM و اشیاء جاوا اسکریپت پشتیبانی می کند.

anime({
 targets: '.box',
 translateX: 250,
 rotate: '1turn',
 duration: 800,
 delay: 200,
 easing: 'easeInOutSine'
});

Anime.js همچنین کنترل های جدول زمانی و توابع callback را فراهم می کند، عالی است برای پروژه های کوچکتر که در آن یک کتابخانه کامل مانند GSAP ممکن است بیش از حد فشرده باشد.

انتخاب تکنیک انیمیشن مناسب

انتخاب بستگی به پیچیدگی انیمیشن و الزامات عملکردی شما دارد.استفاده از انتقال CSS برای تغییرات حالت ساده مانند اثرات شناور یا دید به سرعت. Reach برای هنگامی که شما نیاز به رانندگی منطق سفارشی در بوم یا WebGL دارید، یا هنگامی که شما می خواهید حداقل سربار برای هر چیزی که شامل توالی، مقیاس، یا پیشرفته، یک کتابخانه مانند GSAP یا توسعه زمان و اتصال متقابل است.

معیارهای زیر را در نظر بگیرید:

  • پیچیدگی: تغییر مالکیت واحد (SLT 1) انتقال CSS چند مرحله ای (GarAP)
  • ارزیابی: خواص سخت افزاری (Transform/opacity) باید ترجیح داده شوند کتابخانه هایی مانند GSAP به طور خودکار بهینه سازی در صورت امکان.
  • اندازهٔ بی حد: اگر شما فقط به یک یا دو اثر ساده نیاز دارید، یک کتابخانه ممکن است بیش از حد پر شود. Anime.js - 20 کیلوبایت است؛ هسته GSAP 30 کیلوبایت است.
  • اینترفعال: انیمیشن که به اسکرول، کشیدن یا داده های زمان واقعی پاسخ می دهد، با یا کمک کنندگان کتابخانه مانند ScrollTrigger (GSAP پلاگین) آسان تر است.

ویژگی های Performance

انیمیشن های Janky تجربه کاربر را از بین می برند تا انیمیشن هایی را که در 60 فریم در ثانیه اجرا می شوند، حفظ کنند:

  • [[ویرایش] [۱] [۱۰] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۳] [۱] [۱] [۱۰] [۳]] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [۳]]]]]]]]]]]]]]]]]] [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [بر [۳]]]]]]]]]]]]]]]]]]]]]]]]]
  • استفاده عاقلانه ؛ به مرورگر بگویید که چه چیزی را آماده می کند تا بهینه سازی را آماده کند.
  • Minimize ⁇ : Batch خواندن و نوشتن در مراحل جداگانه.
  • برای فریم های ریخته شده بررسی کنید از پنل عملکرد DevTools مرورگر برای شناسایی وظایف طولانی یا چرخش طرح استفاده کنید.
  • تست در دستگاه های کم پایان: [FLT 1] استفاده از سخت افزار تلفن همراه برای اطمینان از انیمیشن در سخت افزار کندتر باقی مانده است.

دسترسی و کاهش حرکت

همه کاربران از حرکت بهره مند نمی شوند، برخی از حساسیت حرکت یا اختلالات جلیقه ای را تجربه می کنند که انیمیشن ها را ناراحت می کند.به پرس و جو رسانه ها احترام می گذارند و یک شکست را ارائه می دهند:

const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');
if (!prefersReducedMotion.matches) {
 // initiate animation
 gsap.to('.box', { x: 200, duration: 1 });
} else {
 // provide static fallback, e.g., immediately set final state
 box.style.transform = 'translateX(200px)';
}

علاوه بر این، اطمینان حاصل کنید که محتوای متحرک اطلاعات مهمی را پنهان نمی کند.(FLT:0) معیار موفقیت 2.3.3 ، شما باید به کاربران اجازه دهید انیمیشن های غیر ضروری را برای انیمیشن های انتقادی مانند بارگیری شاخص ها غیرفعال کنند، از حرکت استفاده کنید که رابط را مسدود نمی کند یا یک دکمه توقف ارائه نمی دهد.

استفاده از پرونده های واقعی

انیمیشن های جاوا اسکریپت در چندین سناریو مشترک درخشش دارند:

  • از دست دادن و شاخص های پیشرفت: صفحه نمایش اسکلتی و اسپینر متحرک ارتباط برقرار می کند که کار در حال وقوع است، کاهش زمان انتظار درک شده است.
  • عناصر محو یا اسلاید به عنوان اسکرول کاربر، اضافه کردن حس کشف و روایت به صفحات طولانی.
  • بازخورد اعتبار سنجی فرم: پیام های خطا بی طرف، تکان دادن زمینه های نامعتبر، و یا برجسته ورودی اصلاح شده برای هدایت کاربران بدون تکیه بر رنگ.
  • [FLT: 1] نمودارها که از جدول زمانی صفر، تعاملی یا تصاویر بنری که به اقدامات کاربر پاسخ می دهند، تجربیات به یاد ماندنی ایجاد می کنند.
  • فعل و انفعالات میکرو: نوشتن یک پست با قلب متحرک، ضرب و شتم یک سوئیچ با یک پرش صاف، و یا گسترش یک کارت با حرکت مایع ایجاد لذت در کارهای روزمره.

پیاده سازی انیمیشن های جاوا اسکریپت

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

بهترین شیوه ها خلاصه می شود:

  • انیمیشن کوتاه (۲۰۰ تا ۵۰۰ متر برای عناصر UI) را برای جلوگیری از بی صبری نگه دارید.
  • از منحنی های تسکین پایدار در سراسر برنامه خود برای ایجاد یک احساس منسجم استفاده کنید.
  • تست در مرورگرها و دستگاه ها، به ویژه تلفن همراه که در آن تعاملات لمسی ممکن است متفاوت باشد.
  • یک محیط جهانی برای کاربران فراهم کنید تا حرکت را در صورت تمایل کاهش یا غیرفعال کنند.

با تسلط بر این تکنیک های انیمیشن جاوا اسکریپت و جذب دستورالعمل های عملکرد و دسترسی، می توانید رابط های وب را ایجاد کنید که نه تنها جذاب بلکه فراگیر و سریع هستند. کلید استفاده هدفمند از حرکت است - هر انیمیشن باید یک تابع روشن به جای دکوراسیون دکوراسیون باشد.