اخیراً با یکی از طراحان تیمم در مورد دیدگاه او برای طراحی مجدد چگونه با اسکرچ انیمیشن بسازیم قسمت خاصی از سایت Codecademy صحبت می کردم. او برخی از انتقالهای بسیار شیک و تا حدودی مفصل را که در حال بررسی بود، به نمایش گذاشت. من بلافاصله شروع به تعجب کردم که پیاده سازی آنها در برنامه ما که در React ساخته شده است چقدر پیچیده است. آیا باید در چندین کتابخانه جدید بارگیری کنم؟ آیا حتی در React امکان انجام برخی از انیمیشنهای یکپارچه و متوالی عناصر از یک حالت به حالت دیگر وجود داشت، بدون نیاز به کد فوقالعاده پیچیده یا هکهای ناخوشایند؟
اغلب اوقات، زمانی که می خواهید یک انیمیشن در برنامه React چگونه با اسکرچ انیمیشن بسازیم خود داشته باشید، منطقی است که به یکی از کتابخانه های متعددی که جزئیات را انتزاعی می کند و به شما اجازه می دهد از یک سبک بیانی استفاده کنید، بپردازید. اما گاهی اوقات این کتابخانهها شما را تا آخر راه نمیبرند.
شاید شما (یا طراح که با آن کار می کنید) مجموعه پیچیده ای از انیمیشن های متوالی متشکل از عناصر متعدد را هنگام ورود و خروج یک جزء والد به DOM تصور کنید. شاید بخواهید موقعیتهای عناصر خاصی را که در قسمتهای مختلف برنامه دوباره رندر میشوند، متحرک کنید. یا شاید بخواهید کنترل تغییرات یک لیست دائماً در حال بهروزرسانی، ترتیب ورود/بهروزرسانی/خروج a la d3 را در دست بگیرید.
بهطور شگفتانگیزی امکانپذیر است که جلوههای انیمیشن پیچیدهتر چگونه با اسکرچ انیمیشن بسازیم را در کد خود ایجاد کنید، بدون اینکه مجبور باشید با محدودیتهای احتمالی یک کتابخانه انیمیشن سازگار با React مقابله کنید. با این حال، شما باید با مخالفت اندکی با اصل React موافق باشید. در مثالهای زیر، ما به رویدادهای چرخه حیات متصل میشویم، و با تأخیر گهگاهی بهروزرسانیها به منظور متحرک کردن عناصر از یک حالت به حالت دیگر، مؤلفهها را «ناخالص» میسازیم. ما همچنین مستقیماً با استفاده از refs وارد DOM خواهیم شد.
دستکاری چرخه عمر قطعه
برای ایجاد انواع خاصی از انیمیشنها، باید با بخشهای مختلف چرخه حیات کامپوننت تداخل داشته باشیم. برای مثال، اگر میخواهیم حذف عناصر را متحرک کنیم، به راهی نیاز داریم که حذف گرهها از DOM را در طول مدت انیمیشن خروج به تأخیر بیندازیم. برای متحرک سازی انتقال عناصر از نقطه A به نقطه B در سراسر صفحه، باید موقعیت های شروع و پایان گره را درست قبل از اینکه مرورگر تغییر را روی صفحه نمایش دهد محاسبه کنیم و خود انتقال های طرح بندی را مدیریت کنیم.
خوشبختانه، React روشهای چرخه حیات مختلفی را ارائه میکند که میتوانیم به آنها متصل شویم. متد shouldComponentUpdate که زمانی که یک کامپوننت چگونه با اسکرچ انیمیشن بسازیم پروپ یا حالت جدید دریافت میکند فعال میشود، به ما اجازه میدهد بهروزرسانیهای DOM را تا پایان اجرای انیمیشن خروجی به تأخیر بیندازیم. از طرف دیگر اگر قصد داریم عناصر را از یک قسمت صفحه به قسمت دیگر منتقل کنیم، به راهی برای ثبت موقعیت های قبلی عناصر درست قبل از به روز رسانی نیاز داریم. ما میتوانیم از دو روش استفاده کنیم - یا componentWillReceiveProps یا shouldComponentUpdate برای ثبت موقعیتهای قبلی عناصر، و سپس componentDidUpdate برای تغییر مکان آنها و انتقال هموار آنها به مکانهای جدیدشان.
دسترسی به گره های DOM با refs و ویژگی های داده
برای دسترسی به گرههای DOM از یک ref در کانتینر والد استفاده میکنیم تا بتوانیم آنها را متحرک کنیم. حتی اگر در مثالهای زیر، هدف حفظ منطق انیمیشن و اجزای آن نسبتاً جدا از هم است، چند اخطار وجود دارد.
اول، کامپوننت کانتینر پیچیده باید به جای یک جزء کاربردی، مبتنی بر کلاس باشد تا بتوانیم از طریق یک ref به عنصر DOM آن دسترسی داشته باشیم. ثانیاً، برخی از انیمیشن ها همچنین به ه چگونه با اسکرچ انیمیشن بسازیم ر کودک نیاز دارند که یک ویژگی منحصر به فرد data-* داشته باشد. (از data-id استفاده خواهم کرد.) این ویژگی به عملکرد انیمیشن ما کمک می کند تا بین عناصر کودک تمایز قائل شود و آنها را به درستی پردازش کند.
تفکیک نگرانی های انیمیشن به یک جزء درجه بالاتر
در مثالها، من از مؤلفههای مرتبه بالاتر برای جدا کردن منطق انیمیشن چرخه حیات از منطق ارائه مؤلفهها استفاده کردهام. این تنها یک راه ممکن برای سازماندهی چیزها است، و در مورد داوری کم ر چگونه با اسکرچ انیمیشن بسازیم ی پیچیدگی میافزاید. با این حال، به نظر می رسد الگویی که من در مثال ها استفاده کرده ام نسبتاً خوب عمل می کند.
این متشکل از سه قسمت است:
اجزای ارائه، در اینجا یک لیست و یک جزء آیتم. آنها عمدتاً از انیمیشنها بیاطلاع هستند، به جز دو مورد - همانطور که در بالا ذکر شد، فهرست والد دارای یک مرجع است، بنابراین نمیتواند کاربردی باشد و آیتم فرزند باید یک ویژگی data-id را ارائه کند.
توابع انیمیشن در فایل خود. من از کتابخانه انیمیشن وانیلی JS مورد علاقه خود، anime.js برای دستکاری واقعی DOM استفاده می کنم. اما می توانید از یک کتابخانه انیمیشن JS یا انتقال و انیمیشن چگونه با اسکرچ انیمیشن بسازیم های CSS استفاده کنید.
مؤلفه مرتبه بالاتری که مؤلفه List والد را میپیچد و توابع انیمیشن را دریافت میکند. در بخشهای مختلف چرخه حیات کامپوننت، تابع انیمیشن مناسب را با اشاره به مولفه فهرست پیچیده فراخوانی میکند.
این یک نمای کلی سطح بالا از نحوه ساختار کد
How to make animation with scratch است. حالا بیایید به مثال ها نگاه کنیم!
:: برچسبها:
برنامه نویسی کودکان ,
:: بازدید از این مطلب : 173
|
امتیاز مطلب : 10
|
تعداد امتیازدهندگان : 2
|
مجموع امتیاز : 2