Smooth Scrolling (WebApp) — מדריך תמציתי לסוכני AI
- summary:
מנגנון הגלילה החלקה של ה‑WebApp כבוי כברירת מחדל ואינו מופיע בהגדרות; העמוד מסביר למה, מה נשאר פעיל דרך CSS נייטיבי, ואיך מדליקים אותו לניפוי בלבד.
המצב הנוכחי
webapp/static/js/smooth-scroll.jsעדיין נטען גלובלית דרךwebapp/templates/base.html, אבל ``enabled`` הוא ``false`` כברירת מחדל. כשהוא כבוי המודול לא רושם שום מאזין — לא ל‑wheel, לא למקלדת ולא לקליקים על קישורי עוגן — ואינו מאתחל את התאמות האנדרואיד.הכרטיס ”גלילה חלקה“ הוסר ממסך ``/settings``. אין עוד ממשק משתמש שמדליק את המנגנון.
ההעדפה השמורה כבר לא שולטת בהפעלה.
loadPreferencesקוראת מ‑localStorage(smoothScrollPrefs) רק את ערכי הכוונון — משך, easing, רגישויות — ומתעלמת מהמפתחenabled;savePreferencesאינה כותבת אותו. בלי זה ”כבוי כברירת מחדל“ היה נכון רק למשתמש חדש: מי שהדליק את הכרטיס בעבר היה ממשיך לקבל את המנגנון מההעדפה הישנה.POST /api/ui_prefsעםsmooth_scrollעדיין נשלח מ‑savePreferencesכניסיון best‑effort, אבלapi_ui_prefsב‑webapp/app.pyאינו מטפל במפתח הזה ומתעלם ממנו. השרת מעולם לא שמר את ההעדפה הזו.
למה כבוי
המאזין לקישורי עוגן (onAnchorClick) ביטל את התנהגות הדפדפן (preventDefault) וגלל באנימציה משלו — בלי לכתוב את העוגן לכתובת. התוצאה בכל עמוד: לחיצה על <a href="#section"> גללה, אבל location.hash לא השתנה. לכן Back לא חזר לנקודה הקודמת, :target ב‑CSS לא נדלק, כתובת שהועתקה לא נחתה על המקטע, ו‑hashchange — ש‑base.html נשען עליו כדי לשמור את הכתובת האחרונה — לא ירה. הדפדפנים והמכשירים של היום נותנים גלילה חלקה בעצמם, ולכן במקום לתקן מנגנון שאין בו צורך הוא הוצא מהדרך.
מה נשאר פעיל
webapp/static/css/smooth-scroll.cssנטען כרגיל. הוא מגדירhtml { scroll-behavior: smooth }— גלילה חלקה נייטיבית של הדפדפן לעוגנים ול‑scrollIntoView, שכן מעדכנת את הכתובת ומכבדתprefers-reduced-motionדרך ה‑media query שבאותו קובץ.אותו קובץ CSS מכיל גם את כללי ה‑
.modalש‑compare.htmlנשען עליהם (jobs_monitor.htmlו‑theme_builder.htmlנמנעים מהמחלקה הזו בגלל זה). אין להסיר את הקובץ.
הדלקה לניפוי בלבד
ההדלקה תקפה לסשן הנוכחי של הדפדפן ואינה נשמרת:
הוסיפו
smooth_debug=1לכתובת (למשל/?smooth_debug=1). נפתחת חלונית שמציגה אםprefers-reduced-motionפעיל ואם המנגנון דולק, עם כפתור הפעלה/כיבוי וכפתור למחיקת ההעדפה השמורה.או מהקונסול:
window.smoothScroll.enable();
window.smoothScroll.updateConfig({ duration: 300, easing: 'ease-out', offset: 80 });
window.smoothScroll.smoothScrollTo('#section-2', { duration: 400 });
enable() מכבד prefers-reduced-motion — אם ההעדפה פעילה במערכת ההפעלה, המנגנון נשאר כבוי גם אחרי הקריאה.
מה המודול עדיין יודע לעשות כשמדליקים אותו
אנימציית גלילה לגלגלת, למקלדת (PageUp/Down, Home/End, חיצים) ולקישורי עוגן; התאמות אנדרואיד (מאזיני touch פסיביים, momentum ובוסטר אינרציה, התאמות Samsung Internet, ניטור FPS שמקצר אנימציה בעומס); ו‑updateConfig לכוונון משך, easing, offset ורגישויות. הכוונון נשמר ב‑localStorage תחת smoothScrollPrefs — בלי enabled.
הנחיות לסוכני AI
אל תניחו שהמנגנון פעיל:
Boolean(window.smoothScroll?.config?.enabled)הואfalseבברירת המחדל.קישור עוגן חדש הוא
<a href="#id">רגיל. אין צורך ב‑JavaScript, ואין לעקוף את הדפדפן: הוא מנווט, כותב את הכתובת וגולל חלק בזכות ה‑CSS.אם צריך גלילה תכנותית —
element.scrollIntoView({ block: 'start' })מספיק; ה‑CSS הופך אותה לחלקה.אל תוסיפו מאזיני
wheel/touchגלובליים ואל תדליקו את המנגנון מקוד ייצור. ההדלקה היא כלי ניפוי.
קישורים פנימיים
קוד:
webapp/static/js/smooth-scroll.js|webapp/static/css/smooth-scroll.css|webapp/templates/base.htmlמוסכמות CSS וטסטי דפדפן: מערכת ערכות הנושא והטוקנים החדשה