العربية

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

الارتقاء بتجربة المستخدم: دليل شامل لواجهة برمجة تطبيقات انتقالات العرض (View Transitions API) في CSS

في بيئة الويب الديناميكية اليوم، تعتبر تجربة المستخدم (UX) ذات أهمية قصوى. فالتنقل السلس والتفاعلات الجذابة هما مفتاح الحفاظ على رضا المستخدمين وتشجيعهم على العودة. إحدى الأدوات القوية لتحقيق ذلك هي واجهة برمجة تطبيقات انتقالات العرض (CSS View Transitions API)، وهي ميزة متصفح جديدة نسبيًا تسمح للمطورين بإنشاء انتقالات سلسة وجذابة بصريًا بين الحالات أو الصفحات المختلفة داخل تطبيق الويب.

ما هي واجهة برمجة تطبيقات انتقالات العرض في CSS؟

توفر واجهة برمجة تطبيقات انتقالات العرض في CSS طريقة موحدة لتحريك التغييرات المرئية التي تحدث عند التنقل بين الحالات المختلفة في تطبيق الويب. فكر فيها كطريقة لتنسيق تأثيرات التلاشي والانزلاق وغيرها من التأثيرات المرئية السلسة أثناء تحديث المحتوى على الشاشة. قبل هذه الواجهة، كان المطورون يعتمدون غالبًا على مكتبات JavaScript والرسوم المتحركة المعقدة في CSS لتحقيق تأثيرات مماثلة، الأمر الذي قد يكون مرهقًا ويؤدي إلى مشكلات في الأداء. تقدم واجهة برمجة تطبيقات انتقالات العرض نهجًا أكثر انسيابية وأفضل أداءً.

الفكرة الأساسية وراء الواجهة هي التقاط حالتي "قبل" و "بعد" لنموذج كائن المستند (DOM)، ثم تحريك الفروق بينهما. يتولى المتصفح الجزء الأكبر من العمل في إنشاء الرسوم المتحركة، مما يحرر المطورين من الاضطرار إلى كتابة أكواد الرسوم المتحركة المعقدة يدويًا. هذا لا يبسط عملية التطوير فحسب، بل يساعد أيضًا في ضمان انتقالات أكثر سلاسة وأفضل أداءً.

لماذا نستخدم واجهة برمجة تطبيقات انتقالات العرض في CSS؟

كيف تعمل الواجهة؟

تتضمن واجهة برمجة تطبيقات انتقالات العرض في CSS بشكل أساسي دالة JavaScript واحدة: `document.startViewTransition()`. تأخذ هذه الدالة دالة رد نداء (callback) كوسيط. داخل دالة رد النداء هذه، تقوم بتحديثات DOM التي تمثل الانتقال بين العروض. يلتقط المتصفح تلقائيًا حالتي "قبل" و "بعد" لنموذج كائن المستند (DOM) وينشئ الرسوم المتحركة للانتقال.

إليك مثال مبسط:


  function updateContent(newContent) {
    document.startViewTransition(() => {
      // Update the DOM with the new content
      document.querySelector('#content').innerHTML = newContent;
    });
  }

لنحلل هذا الكود:

  1. `updateContent(newContent)`: تأخذ هذه الدالة المحتوى الجديد المراد عرضه كوسيط.
  2. `document.startViewTransition(() => { ... });`: هذا هو جوهر الواجهة. يخبر المتصفح ببدء انتقال العرض. يتم تنفيذ الدالة التي تم تمريرها كوسيط إلى `startViewTransition`.
  3. `document.querySelector('#content').innerHTML = newContent;`: داخل دالة رد النداء، تقوم بتحديث DOM بالمحتوى الجديد. هذا هو المكان الذي تجري فيه التغييرات على الصفحة التي تريد تحريكها.

يتولى المتصفح الباقي. يلتقط حالة DOM قبل وبعد تحديث `innerHTML` وينشئ انتقالًا سلسًا بين الحالتين.

مثال تطبيقي أساسي

إليك مثال أكثر اكتمالاً مع HTML و CSS و JavaScript:

HTML (index.html):





  
  
  View Transitions Demo
  


  

  

Home

Welcome to the home page!

CSS (style.css):


body {
  font-family: sans-serif;
  margin: 20px;
}

nav {
  margin-bottom: 20px;
}

button {
  padding: 10px 20px;
  background-color: #4CAF50;
  color: white;
  border: none;
  cursor: pointer;
  margin-right: 10px;
}

button:hover {
  background-color: #3e8e41;
}

/* أنماط للعناصر المنتقلة */
::view-transition-old(root),
::view-transition-new(root) {
  animation-duration: 0.5s;
  animation-timing-function: ease-in-out;
}

::view-transition-old(root) {
  animation-name: fadeOut;
}

::view-transition-new(root) {
  animation-name: fadeIn;
}

@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes fadeOut {
  from { opacity: 1; }
  to { opacity: 0; }
}

JavaScript (script.js):


const contentDiv = document.getElementById('content');
const navButtons = document.querySelectorAll('nav button');

const pages = {
  home: '

Home

Welcome to the home page!

', about: '

About

Learn more about us.

', contact: '

Contact

Get in touch with us.

', }; function updateContent(target) { document.startViewTransition(() => { contentDiv.innerHTML = pages[target]; document.documentElement.scrollTop = 0; // إعادة تعيين موضع التمرير }); } navButtons.forEach(button => { button.addEventListener('click', (event) => { const target = event.target.dataset.target; updateContent(target); }); });

في هذا المثال، يؤدي النقر فوق أزرار التنقل إلى تشغيل انتقال متلاشي أثناء تحديث المحتوى. يحدد CSS الرسوم المتحركة `fadeIn` و `fadeOut`، ويستخدم JavaScript `document.startViewTransition` لتنسيق الانتقال.

تقنيات متقدمة وتخصيص

تقدم واجهة برمجة تطبيقات انتقالات العرض في CSS العديد من الميزات المتقدمة لتخصيص الانتقالات:

1. الانتقالات المسماة

يمكنك تعيين أسماء لعناصر محددة لإنشاء انتقالات أكثر استهدافًا. على سبيل المثال، قد ترغب في انتقال صورة معينة بسلاسة من موقع إلى آخر عند التنقل بين الصفحات.

HTML:


Image 1

CSS:


::view-transition-group(hero-image) {
  animation-duration: 0.8s;
  animation-timing-function: ease-out;
}

يعين هذا الكود الاسم `hero-image` للصورة. ثم يستهدف CSS مجموعة الانتقال المحددة هذه لتطبيق رسوم متحركة مخصصة. يسمح لك العنصر الزائف `::view-transition-group()` بتنسيق عناصر انتقالية محددة.

2. الخاصية `view-transition-name`

تسمح لك خاصية CSS هذه بتعيين اسم لعنصر سيشارك في انتقال العرض. عندما يكون لعنصرين في صفحتين مختلفتين نفس `view-transition-name`، سيحاول المتصفح إنشاء انتقال سلس بينهما. هذا مفيد بشكل خاص لإنشاء انتقالات العناصر المشتركة، حيث يبدو أن العنصر ينتقل بسلاسة من صفحة إلى أخرى.

3. التحكم باستخدام JavaScript

بينما يتم تشغيل الواجهة بشكل أساسي بواسطة CSS، يمكنك أيضًا استخدام JavaScript للتحكم في عملية الانتقال. على سبيل المثال، يمكنك الاستماع إلى حدث `view-transition-ready` لتنفيذ إجراءات قبل بدء الانتقال، أو حدث `view-transition-finished` لتنفيذ كود بعد اكتمال الانتقال.


document.startViewTransition(() => {
  // Update the DOM
  return Promise.resolve(); // اختياري: إرجاع وعد (Promise)
}).then((transition) => {
  transition.finished.then(() => {
    // انتهى الانتقال
    console.log('Transition complete!');
  });
});

تعيد الخاصية `transition.finished` وعدًا (promise) يتم حله عند اكتمال الانتقال. هذا يسمح لك بتنفيذ إجراءات مثل تحميل محتوى إضافي أو تحديث واجهة المستخدم بعد انتهاء الرسوم المتحركة.

4. التعامل مع العمليات غير المتزامنة

عند إجراء تحديثات DOM داخل دالة رد النداء `document.startViewTransition()`، يمكنك إرجاع وعد (Promise) لضمان عدم بدء الانتقال حتى تكتمل العملية غير المتزامنة. هذا مفيد في السيناريوهات التي تحتاج فيها إلى جلب البيانات من واجهة برمجة تطبيقات (API) قبل تحديث واجهة المستخدم.


function updateContent(newContent) {
  document.startViewTransition(() => {
    return fetch('/api/data')
      .then(response => response.json())
      .then(data => {
        // تحديث DOM بالبيانات التي تم جلبها
        document.querySelector('#content').innerHTML = data.content;
      });
  });
}

5. انتقالات CSS المخصصة

تكمن القوة الحقيقية لواجهة برمجة تطبيقات انتقالات العرض في القدرة على تخصيص الانتقالات باستخدام CSS. يمكنك استخدام الرسوم المتحركة والانتقالات في CSS لإنشاء مجموعة واسعة من التأثيرات، مثل التلاشي، والانزلاق، والتكبير، والمزيد. جرب خصائص CSS المختلفة لتحقيق التأثير المرئي المطلوب.

CSS:


::view-transition-old(root) {
  animation: slideOut 0.5s ease-in-out forwards;
}

::view-transition-new(root) {
  animation: slideIn 0.5s ease-in-out forwards;
}

@keyframes slideIn {
  from { transform: translateX(100%); }
  to { transform: translateX(0); }
}

@keyframes slideOut {
  from { transform: translateX(0); }
  to { transform: translateX(-100%); }
}

ينشئ هذا المثال تأثير انتقال انزلاقي.

توافق المتصفحات والـ Polyfills

تعد واجهة برمجة تطبيقات انتقالات العرض في CSS ميزة جديدة نسبيًا، لذا لا يزال دعم المتصفحات في تطور. حتى أواخر عام 2023، يتمتع متصفحا Chrome و Edge بدعم جيد. ويعمل Firefox و Safari على تنفيذها. قبل استخدام الواجهة في بيئة الإنتاج، من المهم التحقق من توافق المتصفحات الحالي والنظر في استخدام polyfill للمتصفحات القديمة. الـ polyfill هو جزء من كود JavaScript يوفر وظائف ميزة أحدث في المتصفحات القديمة التي لا تدعمها أصلاً.

يمكنك استخدام polyfill مثل هذا الموجود على GitHub لتوفير الدعم للمتصفحات التي لا تملك دعمًا أصليًا بعد. تذكر اختبار تطبيقك جيدًا في متصفحات مختلفة لضمان تجربة مستخدم متسقة.

أفضل الممارسات والاعتبارات

حالات الاستخدام والأمثلة

يمكن استخدام واجهة برمجة تطبيقات انتقالات العرض في CSS في مجموعة متنوعة من السيناريوهات لتحسين تجربة المستخدم:

اعتبارات عالمية

عند تنفيذ واجهة برمجة تطبيقات انتقالات العرض في موقع ويب يمكن الوصول إليه عالميًا، ضع في اعتبارك ما يلي:

الخاتمة

تُعد واجهة برمجة تطبيقات انتقالات العرض في CSS أداة قوية لتعزيز تجربة المستخدم وإنشاء تطبيقات ويب أكثر جاذبية. من خلال تبسيط عملية إنشاء انتقالات سلسة وجذابة بصريًا، تسمح الواجهة للمطورين بالتركيز على تقديم تجربة أفضل بشكل عام لمستخدميهم. على الرغم من أن دعم المتصفحات لا يزال في تطور، إلا أن الفوائد المحتملة لواجهة برمجة تطبيقات انتقالات العرض واضحة. ومع اعتماد الواجهة على نطاق أوسع، من المرجح أن تصبح أداة أساسية في مجموعة أدوات مطور الواجهة الأمامية. احتضن هذه التكنولوجيا الجديدة وارتقِ بتطبيقات الويب الخاصة بك إلى المستوى التالي.

من خلال فهم المفاهيم والتقنيات الموضحة في هذا الدليل، يمكنك البدء في استخدام واجهة برمجة تطبيقات انتقالات العرض في CSS لإنشاء تطبيقات ويب أكثر إتقانًا وجاذبية. جرب انتقالات مختلفة، وخصصها لتناسب احتياجاتك الخاصة، ودائمًا أعط الأولوية لتجربة المستخدم وإمكانية الوصول. إن واجهة برمجة تطبيقات انتقالات العرض هي أداة قوية يمكن أن تساعدك في إنشاء تطبيقات ويب جذابة بصريًا وعملية للغاية في آن واحد.