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

چیزی که ما خواهیم ساخت

بدون مقدمه بیشتر، بیایید بررسی کنیم که چه چیزی می سازیم:

در مورد ما، دو نوع انیمیشن وجود خواهد داشت:

  • اولین انیمیشن هر بار که عنوانی در معرض دید قرار می گیرد اتفاق می افتد.
  • انیمیشن دوم هر بار که کاربر ماوس را روی یک لینک می‌گذارد اتفاق می‌افتد.

1. با نشانه گذاری HTML شروع کنید

ما سه بخش را تعریف می کنیم. هر بخش دارای یک عنوان، یک پاراگراف و یک پیوند خواهد بود.

را اضافه می کنیم data-split به عناصری که متحرک خواهند شد نسبت دهید. اضافی data-split-type ویژگی نوع انیمیشن را تعیین می کند. مقادیر ممکن هستند hover و scroll.

در اینجا نشانه گذاری مورد نیاز است:

2. تقسیم متن

را splitCharacters() تابع وظیفه تقسیم متن تمام عناصر با data-split صفت و قرار دادن هر یک از شخصیت های آنها در یک span عنصر

بنابراین، با فرض اینکه در ابتدا، این عنصر را داریم:

پس از اجرای تابع، نشانه گذاری عنصر فوق به این شکل تبدیل می شود:

نتیجه نهایی مانند قبل از اجرای عملکرد ظاهر می شود.

در اینجا چند نکته قابل توجه است:

  • در داخل عنصر هدف ما را تعریف می کنیم .inner عنصری که شامل .front و .back عناصر. این لفاف را اضافه می کنیم span برای جداسازی سبک های عنصر هدف (به عنوان مثال پیوند) و اجتناب از هر کدام
  • ناسازگاری ها (مثلاً اگر به پیوند بالشتک اضافه کنیم).
  • هر دو .front و .back عناصر حاوی متن اولیه عنصر خواهند بود span عناصر.
  • به طور پیش فرض، محتویات .front عنصر قابل مشاهده خواهد بود. بسته به نوع انیمیشن، محتویات .back زمانی که ماوس را بر روی عنصر مورد نظر نگه می داریم یا تا زمانی که نمایان شود پیمایش کنیم، یکی ظاهر می شود.
  • همانطور که در یک بیت خواهیم دید، ما از آن استفاده خواهیم کرد transition-delay ویژگی برای متحرک سازی متوالی شخصیت ها. برای ایجاد تاخیرهای مختلف بین آنها، از این استفاده می کنیم index متغیر CSS هر کاراکتر، به غیر از یک خالی (فاصله سفید)، به عنوان مقدار این متغیر یک عدد افزایشی دریافت می کند که نشان دهنده موقعیت / شاخص کاراکتر در والد آنها است.

با در نظر گرفتن همه اینها، در اینجا اعلامیه کامل است splitCharacters() عملکرد:

3. اضافه کردن سبک ها

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

در اینجا موارد قابل توجه است:

  • را .back عنصر یک عنصر مطلق خواهد بود.
  • به طور پیش فرض، بین انیمیشن هر کاراکتر 0.015 ثانیه تفاوت وجود خواهد داشت. که گفت، شخصیت اول از .front و .back عناصر دارای تاخیر انتقال 0.015 ثانیه، دومی 0.03 ثانیه، سومی 0.045 ثانیه و غیره خواهند بود. فضای خالی هیچ تاخیری نخواهد داشت.
  • شخصیت های داخل .back عنصر به طور پیش فرض مخفی می شود و زیر متن به صورت زیر قرار می گیرد:
عنصر .back همانطور که در ابتدا ظاهر می شودعنصر .back همانطور که در ابتدا ظاهر می شودعنصر .back همانطور که در ابتدا ظاهر می شود

سبک های مرتبط:

انیمیشن شناور

همانطور که ماوس را روی یک عنصر با نشان می دهیم [data-split-type="hover"] ویژگی، شخصیت های .back عنصر ظاهر خواهد شد در حالی که آنهایی که از .front عنصر با حرکت به سمت بالا به این صورت پنهان می شود:

عنصر .front وقتی انیمیشن اتفاق می افتدعنصر .front وقتی انیمیشن اتفاق می افتدعنصر .front وقتی انیمیشن اتفاق می افتد

در اینجا سبک های مربوطه وجود دارد:

همانطور که صفحه را اسکرول می کنیم، همه عناصر با [data-split-type="scroll"] ویژگی به محض اینکه در viewport قابل مشاهده باشد متحرک می شود. در مثال ما، فقط سرفصل ها این رفتار را خواهد داشت.

برای انجام این کار، کدی را از این آموزش قرض می گیریم که از آن استفاده می کند Intersection Observer API.

بنابراین، wاگر حداقل 50 درصد از هر عنوان در نظر گرفته شود، آن را دریافت خواهد کرد is-animated کلاس در غیر این صورت، این کلاس را از دست می دهد و انیمیشن به حالت اولیه خود باز می گردد.

در زیر ما تابع مسئول این موارد را اعلام می کنیم:

و در اینجا سبک هایی وجود دارد که در این شرایط ایجاد می شوند:

نتیجه

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

بیایید یک بار دیگر به خلقت خود نگاه کنیم:

اگر به راه حل کامل تر و قوی تری برای متحرک سازی کلمات، کاراکترها، خطوط و غیره نیاز دارید، می توانید یک کتابخانه جاوا اسکریپت مانند Splitting.js یا GSAP SplitText.js (اگرچه رایگان نیست).

مثل همیشه، خیلی ممنون که خواندید!