Royi Namir
New member
היי רציתי לשתף איזה משהו שבניתי שלא מצאתי לי פתרון יעיל
הבעיה היא שכל מה שמצאתי זה דגימת ה SCROLL של ה WINDOW וחישוב מחדש
אבל זה בעייתי
כשאתה עושה SCROLL של שנייה- האוונט הזה רץ לפחות 30 פעם ו30 פעם החישוב (של כיוון ה SCROLL) מתחשב.
לא יעיל בעליל.(!)
http://stackoverflow.com/questions/...ermine-the-direction-of-a-jquery-scroll-event
כאן נכנסים 2 מושגים של ויסות :
THROTTLE
AND
DEBOUNCE
במילים פשוטות
THROTTLE - אם אני מזיז במשך דקה את ה SCROLL ( ולא עוזב ) אז הEVENT שלי , יקפוץ כל שניה ( או מה שמגדירים)
אם לא הייתי משתמש בזה הוא היה קופץ אלפי פעמים.
השני , DEBOUNCE , תפקידו : כל עוד אני עושה את ה SCROLL - לא קורה כלום , אבל ברגע שהפסקתי , מיד אחרי זמן T מהנקודה הזו - יקפוץ ה EVENT שלי.
שילוב של שניהם מוביל למשהו מאד יעיל ומעניין שאני יכול לקבל מידע מבלי להכביד על ה BROWSER.
מקרים שימושיים :
תתארו לכם כפתור שכשלוחצים עליו הוא הולך ל SERVER להביא מידע.
עכשיו תתארו לכם שלוחצים 10 פעמים על הכפתור הזה הוא ילך 10 פעמים
אבל עם THROTTLE הוא ילך כל T זמן שתגדירו , מבלי להתחשב בהפגזות , כל עוד שאתפם מפגיזים כמובן.
בקיצור הנה הקוד +דמו:
http://jsbin.com/xuvohahumi/edit?html,js,output
Throttle : execute this function at most once every T milliseconds
Debounce : execute this function only if T milliseconds have passed without it being called
חייב לציין שאכן מצאתי פיתרון אחד שכן משתמש ב INTERVAL - אבל יש שם בעיה.
שם לא השתמשו ב DEBOUNCE. ( שטוב למקרי קצה)
ולמה ?
בואו נגיד שאני רואה סקרול ענק
ואני שם שה THROTTLE יהיה כל 3 שניות ( לא הגיוני אבל בואו נגיד)
אני מתחיל לגלול במשך 3 שניות -> קופץ EVENT אחד
ממשיך עוד 3 שניות -> קופץ EVENT שני
ממשיך למשך שניה אחת לגלול אבל הפעם למעלה ועוצר .
%#%#%@#%@
לא קורה כלום ולא יהיה לך חיווי של SCROLL UP !!!!!
למה ?
כי עוד לא עבר ה 3 שניות פעולה בשביל שה THROTTLE יקפוץ
וכאן נכנס ה DEBOUNCE !
אחרי שתסיים את השניה האחרונה ( שחסר לה 2 שניות בשביל THROTTLE) - יקפותץ ה DEBOUNCE ואז תראה את ה חיווי הנכון לגבי כיוון ה SCROLL ( שזה UP עכשיו)
ז"א חייבים DEBOUNCE ( וחייבים שהערך T שלו יהיה קצת יותר גדול מערך ה THROTTLE)