Smooth Scrolling (WebApp) — מדריך תמציתי לסוכני AI
מדריך זה מסביר את יכולות הגלילה החלקה שהוטמעו ב‑WebApp, כיצד להשתמש בהן באופן בטוח, ומה הדגשים לסוכני AI כדי לשמור על נגישות וביצועים.
מה פעיל כבר
טעינה גלובלית של רכיבי הגלילה: -
webapp/static/js/smooth-scroll.js(מנגנון JS) -webapp/static/css/smooth-scroll.css(סגנונות בסיס + נגישות) - משולב אוטומטית דרךwebapp/templates/base.htmlתמיכה בכניסות קלט: - Wheel/Trackpad (גלגלת) עם אנימציה חלקה - מקלדת: PageUp/Down, Home/End, חיצים - קישורי עוגן (Anchor Links) עם גלילה חלקה
נגישות: - כיבוד
prefers-reduced-motion: reduce— אנימציות מקוצרות/מכובות - Fallback שלscroll-behavior: smoothכאשר JS לא זמיןאנדרואיד (מורחב): - מאזיני
touchב‑{passive: true}+ דגימת מהירות בזמן אמת - Momentum משופר + בוסטר אינרציה כאשר אין אינרציה נייטיבית - הזרקת מחלקותandroid-optimized/android-no-bounceלאיפוס overscroll - התאמות Samsung Internet (מניעתscroll-behaviorכפול) - ניטור FPS שמקצר משך אנימציה בעת עומס - כרטיס ”גלילה חלקה“ במסך ההגדרות מאפשר לכוון משך, easing ורגישות (וקיים בכל פלטפורמה)
API לשימוש קליינט
הפעלה/כיבוי:
window.smoothScroll.enable();
window.smoothScroll.disable();
עדכון הגדרות בזמן ריצה:
window.smoothScroll.updateConfig({
duration: 300, // ms
easing: 'ease-out', // 'linear' | 'ease-in' | 'ease-out' | 'ease-in-out'
offset: 80, // px, למשל Sticky Header
wheelSensitivity: 1.0, // 0.1–3
keyboardSensitivity: 1.5 // 0.5–3
});
גלילה לאלמנט/סלקטור:
window.smoothScroll.smoothScrollTo('#section-2', {
offset: 80,
duration: 400,
easing: 'ease-in-out'
});
שמירת העדפות
השמירה מתבצעת ל‑
localStorageתחתsmoothScrollPrefs.ניסוי שליחה עדינה לשרת (אם קיים API):
POST /api/ui_prefsעם{ smooth_scroll: {...} }.כישלון שרת אינו חוסם — אין תלות בבקשת ה‑POST.
ממשק הגדרות מובנה
במסך
/settingsקיים כרטיס גלילה חלקה עם הטפסים הבאים: - Toggle הפעלה/כיבוי - סליידר משך (150‑1200ms) + בחירתeasing- רגישות גלגלת/מקלדת (0.5‑3x) - סליידר אינרציה לאנדרואיד (10‑60x) - כפתורי בדיקה/איפוס/שמירהניתן עדיין לפתוח חלונית debug באמצעות הוספת
smooth_debug=1ל‑URL לצורך ניטור מהיר.שליטה תכנותית קיימת דרך הקונסול באמצעות
updateConfig:
window.smoothScroll.updateConfig({
duration: 350,
wheelSensitivity: 1.2
});
הנחיות לסוכני AI
זיהוי מהיר של זמינות:
const supported = Boolean(window.smoothScroll?.config?.enabled);
הימנעו מאזיני
wheel/touchכפולים: המערכת מאזינה גלובלית כברירת מחדל.כבדו נגישות: אם
prefers-reduced-motionפעיל — אל תוסיפו אנימציות ידניות.לכוונון — השתמשו ב‑
updateConfigולא בכתיבה ישירה ל‑localStorage.שמרו על ביצועים: אל תוסיפו לולאות polling/
setIntervalכבדות; העדיפוrequestAnimationFrame.
אנדרואיד — מה יש ומה לא
הוטמעו:
- Passive touch listeners + דגימת מהירות
- Momentum יזום עם בוסטר אינרציה וכיול friction/threshold
- התאמות Samsung Internet ו‑overscroll (android-optimized)
- ניטור FPS שמכוונן משך/עקומת אנימציה
- UI מובנה לקביעת עוצמת אינרציה ומשך
לא הוטמעו (ייעשה בשלבים הבאים): - אופטימיזציות WebView מתקדמות (lazy, IntersectionObserver מותאם) - A/B test לניהול פרופילי ביצועים ספציפיים לדפדפנים
נגישות וביצועים
נגישות: -
prefers-reduced-motion: reduceמבטל/מקצר אנימציה. - גלילה לעוגנים מכבדתoffsetלכותרותsticky.ביצועים: - Throttle ל‑
wheelסביב 16ms - שימוש ב‑requestAnimationFrameלכל האנימציות - ב‑Android, קיצור משך אנימציה אם FPS ירוד
פתרון תקלות
“גלילה עדיין קופצת ב‑Samsung”: - נבדק UA לזיהוי Samsung; מוודאים ש‑
document.documentElement.style.scrollBehavior = 'auto'הופעל.“אין השפעה לשינוי הגדרות”: - ודאו שהקריאה היא דרך
updateConfig/ כרטיס ההגדרות ב‑/settingsושקייםwindow.smoothScroll.“משתמש עם Reduced Motion עדיין רואה אנימציות”: - בדקו את העדפת המערכת (DevTools > Rendering > Emulate CSS prefers-reduced-motion).
“אני לא בטוח אם הפיצ’ר פועל”: - הוסיפו ל‑URL את הפרמטר
smooth_debug=1(למשל/?smooth_debug=1או&smooth_debug=1) כדי לפתוח חלונית בדיקה. - החלונית מציגה אם הדפדפן מסמןprefers-reduced-motion, אם המנגנון פעיל, ומאפשרת להפעיל/לכבות או למחוק את ההעדפה שנשמרה ב‑localStorage.
תוכנית המשך (Roadmap מקוצר)
CodeMirror: גלילה חלקה בתוך העורך ו‑Jump to line
TOC חכם: שימוש ב‑offset, Smart Scrolling, Active item
ניטור מתקדם (PerformanceObserver + Analytics)
אופטימיזציות WebView ו‑Virtual Scrolling לרשימות ארוכות
קישורים פנימיים
קוד:
webapp/static/js/smooth-scroll.js|webapp/static/css/smooth-scroll.css|webapp/templates/base.htmlAPI:
POST /api/ui_prefs(עדכון העדפות UI, Best‑effort בלבד)