מעברים בין מסמכים שונים

מעברי תצוגה בין מסמכים מאפשרים ליצור מעברים חלקים, כמו באפליקציה, בין דפים שונים של אפליקציה עם כמה דפים (MPA). כברירת מחדל, הדפדפן מבצע מעבר הדרגתי, אבל אתם יכולים להתאים אותו אישית כך שיתאים לאסתטיקה של האתר שלכם.

שלבי ההטמעה

1. הבעת הסכמה למעברי תצוגה בין מסמכים

כדי שהדפדפן יפעיל את מעברי התצוגה במהלך הניווט, צריך להביע הסכמה לשימוש בהם גם בדף המקור וגם בדף היעד.

/* Respect user's preference for reduced motion */
@media (prefers-reduced-motion: no-preference) {
  /* Add to a global stylesheet shared by both pages */
  @view-transition {
    /* Enables transitions for same-origin navigations */
    navigation: auto;
  }
}

2. התאמה אישית של אנימציות המעבר (אופציונלי)

אתם יכולים לטרגט את המצבים הישנים והחדשים של המעבר באמצעות רכיבי פסאודו כדי ליצור אפקטים כמו שקפים או חשיפות.

/* Customizing the outgoing page animation */
::view-transition-old(root) {
  /* Move the old page out to the left */
  animation: 0.4s ease-in both slide-out;
}

/* Customizing the incoming page animation */
::view-transition-new(root) {
  /* Move the new page in from the right */
  animation: 0.4s ease-out both slide-in;
}

@keyframes slide-out {
  to { transform: translateX(-20%); opacity: 0; }
}

@keyframes slide-in {
  from { transform: translateX(100%); }
}

3. יצירת מעברים כיווניים (אופציונלי)

יכול להיות שתרצו אפקטים שונים של מעבר בהתאם לדפים שאתם מנווטים ביניהם. לדוגמה, כשעוברים מדף הבית לדף יצירת קשר, יכול להיות שתרצו שהתוכן החדש יופיע מימין. כשחוזרים לדף הבית, אין טעם להשתמש באותו אפקט.

אם לדף שאליו אתם מנווטים תמיד יהיה אותו סוג מעבר, לא משנה איך מגיעים לדף, אתם יכולים לציין אותו באמצעות types בכלל @view-transition.

@media (prefers-reduced-motion: no-preference) {
  @view-transition {
    navigation: auto;
    /* Specify the types of view transitions that will always be used on this page. */
    types: previous;
  }
}

אפשר גם לציין סוגי מעברים באופן מותנה בתוך רכיב event listener של pagereveal.

window.addEventListener("pagereveal", async (e) => {
  if (e.viewTransition && window.navigation?.activation) {
    // Use application-specific logic to compute a transition type
     const transitionType = yourTransitionTypeLogic(navigation.activation.from, navigation.activation.entry);
    e.viewTransition.types.add(transitionType);
  }
});

לאחר מכן, משתמשים בסלקטור המדומה :active-view-transition-type() כדי להחיל את האנימציות השונות על כל סוג.

:active-view-transition-type(next) {
  &::view-transition-old(root) {
    animation-name: slide-out-next;
  }

  &::view-transition-new(root) {
    animation-name: slide-in-next;
  }
}
:active-view-transition-type(previous) {
  &::view-transition-old(root) {
    animation-name: slide-out-previous;
  }

  &::view-transition-new(root) {
    animation-name: slide-in-previous;
  }
}

אסטרטגיות חלופיות

אם הדפדפן לא תומך במעברי תצוגה או במעברי תצוגה בין מסמכים, הוא יבצע ניווט רגיל ומיידי בדפים. מעברי תצוגה בין מסמכים הם שיפור הדרגתי (progressive enhancement). הפונקציונליות העיקרית של האתר לא מושפעת.

כדי לבדוק אם יש תמיכה ב-JavaScript:

if ('onpagereveal' in window) {
  // Browser supports cross-document view transitions
}

אם הדפדפן לא תומך ב-Navigation API, לא תוכלו להשתמש בו כדי לקבוע את סוג המעבר. צריך להשתמש בשיטה חלופית כדי לקבוע את סוג המעבר, או לספק סוג מעבר חלופי. אחרת, הדפדפן יבצע ניווט רגיל לדף מיידי.

כדי לבדוק אם יש תמיכה ב-JavaScript:

if (window.navigation?.activation) {
  // Browser supports the Navigation API
}