מה לא טוב בקוד? (js)

ש.ב.ח.

משתמש מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
D I G I T A L
This user does not have permission to use the HTML BB code.

מה אמור להיות?
כשהמשתמש לוחץ על האלמנט החלון יגלל מטה בפעימות של 100 פיקסל הפונקציה תחזור על עצמה כל עוד העכבר לחוץ.
 

s976

משתמש סופר מקצוען
הנדסת תוכנה
D I G I T A L
יש כאן כמה טעויות.
אם תנסה לעשות DEBUG תראה אותן אחת אחת.
קודם כל הסקריטפ שלך מופיע לפני שהופיע האלמנט שעליו לוחצים. ולכן בנקודת הזמן שרץ הסקריפט הוא לא מכיר את האלמנט הזה. שגיאה זו מופיעה בקונסול.

דבר שני.
האירוע הזה:
document.getElementById("down").onmousedown
יקרה לפני האירוע
document.body.onmousedown
שכן האלמנט עם ID הוא יותר פנימי.
ולכן לעולם לא יקרה מה שאתה מנסה לעשות:
mouseDown = 1;
ואז, כמובן, שום דבר לא יעבוד

דבר שלישי
ל- scrollBy
אי אפשר למסור אובייקט עם behavior
כנראה שהתכוונת ל
window.scrollTo(options)

נ.ב. מה שכתב @5127109 - זה אכן יותר מקובל. אבל לא הכרחי. זה אמור לעבוד גם בדרך שאתה עשית.
 

ש.ב.ח.

משתמש מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
D I G I T A L
קודם כל הסקריטפ שלך מופיע לפני שהופיע האלמנט שעליו לוחצים. ולכן בנקודת הזמן שרץ הסקריפט הוא לא מכיר את האלמנט הזה. שגיאה זו מופיעה בקונסול.
אוקי אעביר אותו מעל...

דבר שני.
האירוע הזה:
document.getElementById("down").onmousedown
יקרה לפני האירוע
document.body.onmousedown
שכן האלמנט עם ID הוא יותר פנימי.
ולכן לעולם לא יקרה מה שאתה מנסה לעשות:
mouseDown = 1;
ואז, כמובן, שום דבר לא יעבוד
אם אני יהפוך את הbody לid זה כן אמור לעבוד?
כלומר כך:
This user does not have permission to use the HTML BB code.

דבר שלישי
ל- scrollBy
אי אפשר למסור אובייקט עם behavior
כנראה שהתכוונת ל
window.scrollTo(options)
במחילה אם זה אני לא מסכים!
לא בגלל שאני יודע יותר טוב ממך אלא פשוט ניסיתי את זה בתוך התגית עצמה כך:
This user does not have permission to use the HTML BB code.
וזה עבד מצויין!
 

ש.ב.ח.

משתמש מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
D I G I T A L
נערך לאחרונה ב:

ש.ב.ח.

משתמש מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
D I G I T A L
זה לאחר תיקונים והצעות של החברים בפורום:
מה בכל זאת לא טוב בזה? (פשוט זה לא עובד)
This user does not have permission to use the HTML BB code.
 

UU

משתמש סופר מקצוען
הנדסת תוכנה
לא קראתי את כל הקוד
אבל אולי פשוט להכניס את הכתיבה שלו לאחר ה-LOAD של העמוד
אולי הפרמטר שאתה מנסה לקבל עוד לא קיים כשהקוד נכתב?
 

s976

משתמש סופר מקצוען
הנדסת תוכנה
D I G I T A L
בedge ניסיתי וזה עבד

ובקשר לקוד (כמו שכתבתי לאחר התיקונים שהצעת) למה הוא לא עובד גם לא בכרום?
זה לא עובד לך משתי סיבות.
א. צריך לרשום scrollBy ולא scrollby

ב. אם אתה לומד JS, אז הנקודה הבאה מאוד כדאי להתעמק בה (זה סוג בעיה שקורה המון אצל המתחילים, ולא רק)
תראה את הקטע קוד (שלך) הזה [דרך אגב, אם מישהו יכול לדבר עם הנהלת הפרוג שיגדירו את כיוון קטעי הקוד משמאל לימין - תבוא עליו ברכה]
while (mouseDown == 1)
{window.scrollby({top: 1800, left: 0, behavior: 'smooth' });}}

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

ההפעלה הבאה של הלולאה צריכה להתבצע רק אחרי שה-scrollBy הראשון הסתיים.

תראה, למשל את הקוד הזה.
הוא עובד תקין.
<script type="text/javascript">


let counter = 0;

var mouseDown = 0;

document.getElementById("down").onmouseup = function() {
mouseDown = 0;
}
document.getElementById("down").onmousedown =
function(){
mouseDown = 1;
while (mouseDown == 1 && counter<10)
{
counter++;
window.scrollBy({top: 1800, left: 0, behavior: 'smooth' });
}
}


</script>
 
  • תודה
Reactions: UU

ש.ב.ח.

משתמש מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
D I G I T A L
תראה, למשל את הקוד הזה.
הוא עובד תקין.
בדקת? לי זה לא עובד
בדרימוויאור של אדובי הוא כותב תקלה על השורה שלThis user does not have permission to use the HTML BB code.
כך:
unexpected token countor
 

UU

משתמש סופר מקצוען
הנדסת תוכנה
במקום let תכתוב var
וזה ממש לא אומר שהקוד לא עובד...
 

ש.ב.ח.

משתמש מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
D I G I T A L
במקום let תכתוב var
וזה ממש לא אומר שהקוד לא עובד...
אין קשר, הקוד לא עובד כי ניסיתי, חוץ מזה הדרימוויאור רושם שגיאה....
 

ש.ב.ח.

משתמש מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
D I G I T A L
לא קראתי את כל הקוד
אבל אולי פשוט להכניס את הכתיבה שלו לאחר ה-LOAD של העמוד
אולי הפרמטר שאתה מנסה לקבל עוד לא קיים כשהקוד נכתב?
ניסיתי להכניס אותו בסוף הbody או מה שנקרא footer
 

s976

משתמש סופר מקצוען
הנדסת תוכנה
D I G I T A L
אין קשר, הקוד לא עובד כי ניסיתי, חוץ מזה הדרימוויאור רושם שגיאה....
@UU צודק. אתה משתמש בתוכנה מיושנת לכן היא לא מכירה את הסטנדרט החדש של JS
מה שפעם סימנו ב-VAR היום מסמנים בLET או בCONST
אבל VAR עובד בכל מקום. כך שאם תחליף LET לVAR זה אמור לעבוד גם בדרימבוובר. וכפי שכתב UU
 

ש.ב.ח.

משתמש מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
D I G I T A L
@UU צודק. אתה משתמש בתוכנה מיושנת לכן היא לא מכירה את הסטנדרט החדש של JS
מה שפעם סימנו ב-VAR היום מסמנים בLET או בCONST
אבל VAR עובד בכל מקום. כך שאם תחליף LET לVAR זה אמור לעבוד גם בדרימבוובר. וכפי שכתב UU
אני תוהה... כתבתי אותו באתר וורדפרס וזה לא עובד לי...:(
האם ניסיתם את הקוד הזה באמיתי?

שנית, אשמח לדעת מה השתנה כשהוספת את המשתנה ההוא, מה שבסך הכל יקרה - כך נראה לי לפי הבנתי הדלה - שהאו יעשה את הפעולה מקס' 10 פעמים
אך כמו שכתבת לכאורה הוא גם לא יעשה פחות כי הקוד רץ מיד כשהעכבר ירד ואפ' לשנייה...

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

s976

משתמש סופר מקצוען
הנדסת תוכנה
D I G I T A L
אם זה לא עובד לך, כנראה שיש לך איזו טעות אחרת.
הקוד שרשמתי עובד כפי שמצופה ממנו
בבקשה: https://jsfiddle.net/s976/j52ukqrp/
 

UU

משתמש סופר מקצוען
הנדסת תוכנה
ניסיתי להכניס אותו בסוף הbody או מה שנקרא footer
זה עדיין נשמע שהקוד לא מכיר את המשתנה
בטוח שהID הזה קיים לפני טעינת כל העמוד? אולי הוא מגיע בעצמו מ-JS?
נסה לבצע על סלקטור אחר שבטוח בה בעמוד (לוגו לדוגמא) ונראה תוצאות
בפרט שיש פה מישהו שכותב שהקוד עובד
 

ש.ב.ח.

משתמש מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
D I G I T A L
אם זה לא עובד לך, כנראה שיש לך איזו טעות אחרת.
הקוד שרשמתי עובד כפי שמצופה ממנו
בבקשה: https://jsfiddle.net/s976/j52ukqrp/
כן, אתה צודק במה שעשית זה עובד קצת יותר טוב מאצלי, מה שאצלי בכלל לא מגיב אצלך עושה את הקוד פעם אחת! (נסה להוריד את הפיקסלים בtop ל10).
 

ש.ב.ח.

משתמש מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
D I G I T A L
זה עדיין נשמע שהקוד לא מכיר את המשתנה
בטוח שהID הזה קיים לפני טעינת כל העמוד? אולי הוא מגיע בעצמו מ-JS?
נסה לבצע על סלקטור אחר שבטוח בה בעמוד (לוגו לדוגמא) ונראה תוצאות
בפרט שיש פה מישהו שכותב שהקוד עובד
הid באמצע הbody והסקריפט בא בסופו של הbody
 

אולי מעניין אותך גם...

הפרק היומי

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


תהילים פרק קכז

א שִׁיר הַמַּעֲלוֹת לִשְׁלֹמֹה אִם יְהוָה לֹא יִבְנֶה בַיִת שָׁוְא עָמְלוּ בוֹנָיו בּוֹ אִם יְהוָה לֹא יִשְׁמָר עִיר שָׁוְא שָׁקַד שׁוֹמֵר:ב שָׁוְא לָכֶם מַשְׁכִּימֵי קוּם מְאַחֲרֵי שֶׁבֶת אֹכְלֵי לֶחֶם הָעֲצָבִים כֵּן יִתֵּן לִידִידוֹ שֵׁנָא:ג הִנֵּה נַחֲלַת יְהוָה בָּנִים שָׂכָר פְּרִי הַבָּטֶן:ד כְּחִצִּים בְּיַד גִּבּוֹר כֵּן בְּנֵי הַנְּעוּרִים:ה אַשְׁרֵי הַגֶּבֶר אֲשֶׁר מִלֵּא אֶת אַשְׁפָּתוֹ מֵהֶם לֹא יֵבֹשׁוּ כִּי יְדַבְּרוּ אֶת אוֹיְבִים בַּשָּׁעַר:
נקרא  12  פעמים

אתגר AI

אחרי החגים • אתגר 13

לוח מודעות

למעלה