إنشاء منحنيات رسوم متحركة معقدة في CSS باستخدام دالة الإيقاع Line()

نقدّم لك linear()، وهي وظيفة تخفيف في CSS يتم إدخال تأثير خطي بين نقاطها، ما يتيح لك إعادة إنشاء تأثيرات الارتداد والربيع.

تغيير السرعة في CSS

عند تحريك العناصر أو نقلها في CSS، يمكنك التحكم في معدّل تغيّر القيمة من خلال دالة التخفيف باستخدام السمتَين animation-timing-function وtransition-timing-function.

تتوفّر عدة كلمات رئيسية كإعدادات مسبقة في CSS، وهي linear وease وease-in وease-out وease-in-out. ولإنشاء منحنيات التخفيف الخاصة بك، استخدم الدالة cubic-bezier()، أو اتّخِذ أسلوبًا قائمًا على الخطوات باستخدام وظيفة التخفيف steps().

وعند استخدام مستويات الإرخاء بشكل مناسب، تمنح العنصر المتحرك إحساسًا بالوزن حيث يبدو أنه يجمع الزخم.

لا يمكن في CSS إنشاء منحنيات معقّدة، مثل تأثيرات الارتداد أو تأثير الربيع، ولكن بفضل linear() يمكنك الآن تقريبها بشكل تقريبي.

مقدّمة عن linear()

دعم المتصفح

  • 113
  • 113
  • 112
  • x

وهناك طريقة جديدة لتحديد تخفيف في CSS وهي باستخدام linear(). تقبل هذه الدالة عددًا من علامات الوقف، مفصولة بفواصل. تمثّل كل محطة رقم فرديًا يتراوح من 0 إلى 1. بين كل محطة، يتم إجراء الاستيفاء بطريقة خطية، موضحًا اسم الدالة.

animation-timing-function: linear(0, 0.25, 1);

وتنتشر محطات التوقف هذه بشكل متساوٍ. وهذا يعني أنّه في المقتطف السابق، سيتم استخدام قيمة الإخراج 0.25 بنسبة% 50.

يظهر في شكل رسم بياني لشركة linear(0, 0.25, 1) على النحو التالي:

تصور الرسم البياني للخطي(0, 0.25, 1).

إذا كنت لا تريد أن يتم نشر محطّات التوقف بشكل متساوٍ، يمكنك اختيار طول محطة. عند تمرير قيمة واحدة كطول محطة، فإنك تحدد نقطة البداية:

animation-timing-function: linear(0, 0.25 75%, 1);

في هذه الحالة، لن يتم استخدام قيمة الناتج 0.25 عند العلامة 50% ولكن عند استخدام 75%.

تصور رسم بياني خطي(0, 0.25 75%, 1).

عند تحديد قيمتين كطول محطة، فإنك تحدد نقطة البداية والنهاية:

animation-timing-function: linear(0, 0.25 25% 75%, 1);

سيتم استخدام قيمة مخرجات تبلغ 0.25 لتتراوح بين% 25 و% 75.

تصور رسم بياني خطي(0, 0.25 25% 75%, 1).

إنشاء منحنيات معقدة باستخدام الدالة line()

على الرغم من أنّ الأمثلة أعلاه ليست خطوات تخفيف بسيطة للغاية، يمكنك استخدام linear() لإعادة إنشاء دوال التخفيف المعقّدة بطريقة بسيطة للغاية، مع الحلّ بفقدان بعض الدقة.

وبالنسبة إلى منحنى تخفيف الارتداد هذا، وهو نوع من التخفيف لا يمكن التعبير عنه مباشرةً في CSS، المحدد باستخدام JavaScript:

function easing(pos) {
  const t = 7.5625;
  const e = 2.75;
  return pos < 1 / e
    ? t * pos * pos
    : pos < 2 / e
    ? t * (pos -= 1.5 / e) * pos + 0.75
    : pos < 2.5 / e
    ? t * (pos -= 2.25 / e) * pos + 0.9375
    : t * (pos -= 2.625 / e) * pos + 0.984375;
}

في حين أن التعليمات البرمجية قد لا تخبرك كثيرًا، فقد يخبرك التصور بذلك. في ما يلي الناتج، ويتم عرضه على شكل منحنى أزرق:

منحنى ارتداد سلس مرسوم باللون الأزرق.

ويمكن تبسيط المنحنى بإضافة عدد من علامات التوقف عليه. هنا، تشير كل نقطة خضراء إلى محطة:

منحنى ارتداد أملس باللون الأزرق مع نقاط خضراء أعلاه

عند تمريرها إلى linear()، تكون النتيجة منحنى يشبه نوعًا ما المنحنى الأصلي، ولكنّه أصعب قليلاً عند الحواف.

منحنى مبسط باللون الأخضر موضوع على المنحنى الأصلي السلس باللون الأزرق.

قارِن بين المربّع الأخضر المتحرك والمربّع الأزرق، إذ يمكنك معرفة أنّه ليس سلسًا.

ولكن إذا أضفت محطات كافية، يمكنك تقريب المنحنى الأصلي بشكل جيد. إليك نسخة معدَّلة:

منحنى معدّل، يحتوي على ضعف عدد محطات التوقف.

ومن خلال مضاعفة عدد محطات التوقف، تحصل على نتيجة سلسة.

يبدو الرمز المستخدم للتحريك كما يلي:

animation-timing-function: linear(
  /* Start to 1st bounce */
  0, 0.004, 0.016, 0.035, 0.063 9.1%, 0.141, 0.25, 0.391, 0.563, 0.765, 1,
  /* 1st to 2nd bounce */
  0.891, 0.813 45.5%, 0.785, 0.766, 0.754, 0.75, 0.754, 0.766, 0.785, 0.813 63.6%, 0.891, 1 72.7%,
  /* 2nd to 3rd bounce */
  0.973, 0.953, 0.941, 0.938, 0.941, 0.953, 0.973, 1,
  /* 3rd bounce to end */
  0.988, 0.984, 0.988, 1
);

أداة للمساعدة

وسيكون إنشاء قائمة المحطات هذه يدويًا أمرًا مرهقًا للغاية. لحسن الحظ، أنشأ جايك وآدم أداة لمساعدتك في تحويل منحنى التخفيف إلى نظيره linear().

لقطة شاشة لأداة إنشاء التخفيف الخطي
لقطة شاشة تُظهر كيفية استخدام https://linear-easing-generator.netlify.app/ على استخدامها.

وتستعين الأداة بدالة تغيير JavaScript أو منحنى SVG كإدخال، وتعرض المنحنى المبسّط باستخدام linear(). استخدِم أشرطة التمرير للتحكم في عدد مرات التوقّف التي تريدها ومدى دقتها.

في أعلى يسار الصفحة، يمكنك أيضًا اختيار أحد الإعدادات المسبقة: تضمين "Spring" أو "ارتداد" أو "المرونة البسيطة" أو "التخفيف المؤكّد" في Material Design.

دعم "أدوات مطوري البرامج"

تتوفّر في "أدوات مطوري البرامج" إمكانية عرض نتيجة linear() وتعديلها. انقر على الرمز لعرض تلميح تفاعلي يتيح لك السحب بين محطات التوقف.

لقطة شاشة لمحرِّر &quot;Line() &quot; في Chrome DevTools
لقطة شاشة لمحرِّر "Line() " في Chrome DevTools

تتوفّر هذه الميزة ضمن حزمة "أدوات مطوري البرامج" في حزمة "أدوات مطوري البرامج" مع الإصدار 114 من Chrome.

صورة من تصوير هوي خرائطون على Unsplash