فرانتیوم همیشه عاشق داستانهای جادویی بود. به نظر او، قشنگترین داستانهای جادوگری مربوط به دنیای هری پاتر و ویچر است. یکی از تفریحاتش این بود که روی تختش دراز بکشد، چشمهایش را ببندد و در دنیای خیالی خودش غرق شود. به نظرش این کار یکی از لذتبخشترین لحظههای زندگی بود.
یک روز بعد از کاری طولانی و خستهکننده، روی کاناپه نشسته بود و غرق در خیالپردازی بود. در ذهنش، خودش را جادوگری نامی میدید که مشغول اجرای طلسمها و جادوجنبل است.
ناگهان با خودش فکر کرد: «توی دنیای فرانت چطوری میشه جادو کرد؟» — آهاااااااااااااااااااااااا! جوابش چیزی نبود جز خلق انیمیشنهای جادویی با کدنویسی!

پروژهی اولیه
برای دانلود پروژهی اولیه روی این لینک کلیک کنید.
ساختار فایلها
landing
├─ images/
│ ├─ 1.webp
│ ├─ 2.jpg
│ ├─ 3.webp
│ └─ 4.webp
├─ index.html
├─ index.js
└─ styles.css
جزئیات پروژه
پیادهسازی این سوال به سه قسمت مهم تقسیم میشود:
- اسلایدر
- اسکرول خودکار
- ظاهر شدن باکس
پیادهسازی اسلایدر در first-section
first-sectionدر این بخش یک اسلایدر تصویری با چهار تصویر متفاوت وجود دارد.
-
در فایل
index.htmlمیتوانید ساختار اسلایدر را مشاهده کنید.
هر تصویر درون یک المان با کلاسslideقرار دارد و همهی آنها درون عنصری با کلاسslidesقرار گرفتهاند. -
در دو سمت اسلایدر، دو پیکان ناوبری با کلاسهای
prevوnextوجود دارند.- با کلیک روی پیکان سمت راست (
.next) باید به تصویر بعدی برویم. - با کلیک روی پیکان سمت چپ (
.prev) باید به تصویر قبلی برگردیم.
- با کلیک روی پیکان سمت راست (
نکات مربوط به جابهجایی:
- اگر روی تصویر چهارم باشیم و روی پیکان سمت راست کلیک کنیم، باید به تصویر اول بازگردیم.
- اگر روی تصویر اول باشیم و روی پیکان سمت چپ کلیک کنیم، باید به تصویر چهارم منتقل شویم.
ویژگی اسلاید خودکار:
- اسلایدر باید هر ۴ ثانیه یکبار بهصورت خودکار به تصویر بعدی برود. جابهجایی اسلایدها در حالت خودکار نیز باید مشابه موارد گفته شده در بخش نکات مربوط به جابهجایی باشد.
- زمانی که کاربر با پیکانها به صورت دستی اسلاید را تغییر میدهد، تایمر خودکار باید از ابتدا ریست شود.
(یعنی اگر ۳ ثانیه گذشته باشد و کاربر کلیک کند، شمارش دوباره از ۰ شروع میشود.)
نکات فنی:
- میتوانید از خاصیت
transform: translateX(...)برای جابهجایی اسلایدها استفاده کنید. - منطق خودکارسازی حرکت را با
setIntervalپیادهسازی کنید و در زمان تعامل کاربر آن را بازنشانی (clearIntervalو سپس شروع مجدد) کنید.

پیادهسازی اسکرول خودکار در second-section
second-sectionدر این بخش قرار است یک حرکت افقی خودکار برای ردیف ایموجیها پیادهسازی شود.
-
در فایل
index.htmlتعدادی ایموجی درون یک عنصر با کلاسscroll-trackقرار گرفتهاند که داخل یک عنصر والد با کلاسinfinite-scroll-wrapperهستند. -
هدف این است که این ردیف ایموجیها از لحظهی بارگذاری صفحه، بهصورت پیوسته و نرم به سمت چپ حرکت کنند تا زمانی که به انتهای مسیر برسند.
- برای این منظور میتوانید با استفاده از جاوااسکریپت و ویژگی CSS
transform: translateX(...)موقعیت افقی عنصرscroll-trackرا بهصورت تدریجی تغییر دهید. - از متد
requestAnimationFrameبرای ایجاد حرکت روان و بدون لگ استفاده کنید. - سرعت حرکت میتواند با مقدار افزایشی (مثلاً
1pxدر هر فریم) کنترل شود.
نکتهها:
- حرکت باید بهصورت خودکار و بدون دخالت کاربر آغاز شود.
- زمانی که اسکرول به انتهای مسیر رسید (عرض کل
scroll-trackمنهای عرض والدwrapper)، حرکت متوقف میشود. - نیازی به استفاده از CSS Animation یا Keyframes نیست؛ منطق باید کاملاً با JS کنترل شود.

پیادهسازی ظاهر شدن باکسها در third-section
third-sectionدر این سکشن دو بخش به نامهای first-box و second-box وجود دارد که از نظر ساختار کلی مشابه هستند، اما جهت نمایش و ترتیب انیمیشن آنها متفاوت است.
-
توجه کنید: تمام انیمیشنها زمانی فعال میشوند که کاربر در حال اسکرول به سمت پایین صفحه باشد و المان مربوطه وارد محدودهی دید کاربر شود (حدود
10pxقبل از رسیدن باکس به viewport). -
با ورود المان به محدودهی دید، کلاس
activeاضافه میشود و CSSهای مربوط بهopacityوtransformبرای تصویر و متنها اعمال میگردد.
توجه: در فایل CSS، کامنتی با متن /* third section */ قرار دارد. با بررسی استایلهای بعد از آن، میتوانید پیادهسازی این بخش را بهتر درک کنید.
اِلمان first-box
-
تصویر در سمت چپ قرار دارد و بهصورت دایرهای کامل است.
-
متنها در سمت راست قرار دارند.
انیمیشن:
-
باکس
first-boxبا اضافه شدن کلاسactiveفعال میشود. -
تصویر از سمت چپ ظاهر میشود.
-
متنها (پاراگرافها) به ترتیب و با تأخیر زمانی ظاهر میشوند و حداقل
opacity > 0.9دارند. -
این انیمیشن فقط یکبار اجرا میشود.
اِلمان second-box
-
تصویر در سمت راست قرار دارد و بهصورت دایرهای کامل است.
-
متنها در سمت چپ قرار دارند.
انیمیشن:
-
باکس
second-boxبا اضافه شدن کلاسactiveفعال میشود. -
تصویر از سمت راست ظاهر میشود.
-
متنها (پاراگرافها) به ترتیب و با تأخیر زمانی ظاهر میشوند و حداقل
opacity > 0.9دارند. -
این انیمیشن فقط یکبار اجرا میشود.

آنچه باید آپلود کنید
- توجه: پس از پیادهسازی موارد خواسته شده، فایل
index.jsرا برای سیستم داوری ارسال کنید. - توجه: شما مجاز به افزودن فایل جدیدی در این ساختار نیستید و تنها باید تغییرات را در فایل
index.jsاعمال کنید. - توجه: برای جلوگیری از بروز مشکل در کار با DOM، پیشنهاد میشود یک رویداد DOMContentLoaded تعریف کرده و کدهای خود را درون آن قرار دهید.
ارسال پاسخ برای این سؤال