הצמדת גלילה לאחר שינוי הפריסה

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

CSS Scroll Snap מאפשר למפתחי אינטרנט ליצור חוויות גלילה מבוקרות על ידי הצהרה על מיקומי נעילה של גלילה. אחד החסרונות של ההטמעה הנוכחית הוא שנעילה בזמן גלילה לא פועלת טוב כשהפריסה משתנה, למשל כשמשנים את הגודל של אזור התצוגה או מסובבים את המכשיר. הבעיה הזו תוקנה ב-Chrome 81.

יכולת פעולה הדדית

בדפדפנים רבים יש תמיכה בסיסית ב-CSS Scroll Snap. מידע נוסף זמין במאמר האם אפשר להשתמש ב-CSS Scroll Snap?

נכון לעכשיו, Chrome הוא הדפדפן היחיד שמטמיע הצמדת גלילה אחרי שינויים בפריסה. ב-Firefox יש פנייה פתוחה להטמעת התכונה הזו, וגם ב-Safari יש פנייה פתוחה לצילום מחדש אחרי שתוכן הגלילה משתנה. בינתיים, אפשר לדמות את ההתנהגות הזו על ידי הוספת הקוד הבא למאזינים לאירועים כדי לאלץ את ההצמדה להתבצע: javascript scroller.scrollBy(0,0); עם זאת, לא בטוח שהגלילה תצמיד חזרה לאותו רכיב.

רקע

CSS Scroll Snap

התכונה CSS Scroll Snap מאפשרת למפתחי אינטרנט ליצור חוויית גלילה מבוקרת על ידי הצהרה על מיקומי נעילה של גלילה. המיקומים האלה מבטיחים שהתוכן שניתן לגלילה ייצב בצורה נכונה ביחס לקונטיינר שלו, כדי למנוע בעיות שקשורות לגלילה לא מדויקת. במילים אחרות, גלילה עם נקודות עצירה:

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

שני תרחישים נפוצים לדוגמה לשימוש ב-scroll snap הם מאמרים שמחולקים לדפים וקרוסלות של תמונות.

דוגמה ל-CSS scroll snap.
דוגמה ל-CSS scroll snap. בסוף הגלילה, המרכז האופקי של התמונה יישר למרכז האופקי של מאגר התמונות.

חסרונות

מיקומי הצמדה נמחקים כשמשנים את גודל החלון.

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

  • שינוי הגודל של חלון
  • סיבוב מכשיר
  • פתיחת כלי הפיתוח

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

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

תמיכה מובנית ב-Snap מחדש אחרי שינויים בפריסה בגרסה 81 של Chrome

החסרונות שצוינו כבר לא קיימים ב-Chrome 81: גלילות ימשיכו להישאר מוצמדות גם אחרי שינוי הפריסה. אחרי שינוי הפריסה, המערכת תבדוק מחדש את מיקומי הגלילה ותצמיד אותם מחדש למיקום הצמדה הקרוב ביותר, אם יהיה צורך. אם רכיב הגלילה היה מקובע בעבר לרכיב שעדיין קיים אחרי שינוי הפריסה, רכיב הגלילה ינסה לחזור אליו. שימו לב למה שקורה כשהפריסה משתנה בדוגמה הבאה.

מיקום ה-Snap אבד
כשמסובבים מכשיר, לא נשמרות המיקומים של הצמדת החלונות ב-Chrome 80. אחרי שמגללים לשקופית עם הכיתוב NOPE ומשנים את כיוון המכשיר מלאורך לרוחב, מוצג מסך ריק. זה סימן שהמיקום של הצמדת הגלילה אבד.
מיקום הצמדה נשמר
כשמסובבים מכשיר, המערכת שומרת את מיקומי הצמדת החלונות ב-Chrome 81. השקופית עם הכיתוב NOPE נשארת גלויה גם אם כיוון המכשיר משתנה כמה פעמים.

פרטים נוספים זמינים במפרט של צילום מחדש אחרי שינויים בפריסה.

דוגמה: פסורי גלילה דביקים

בעזרת התכונה 'התאמה אוטומטית אחרי שינויים בפריסה', מפתחים יכולים להטמיע סרגל גלילה דביק באמצעות כמה שורות של CSS:

.container {
  scroll-snap-type: y proximity;
}

.container::after {
  scroll-snap-align: end;
  display: block;
}

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

הוספת הודעה חדשה מפעילה הצמדה מחדש, כך שהיא תישאר בתחתית המסך ב-Chrome 81.

עבודות עתידיות

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

משוב

המשוב שלכם יעזור לנו לשפר את האפשרות של הצמדה מחדש אחרי שינויים בפריסה, אז כדאי לנסות אותה ולעדכן את מהנדסי Chromium מה חשבתם.