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

UU

משתמש סופר מקצוען
הנדסת תוכנה
הid באמצע הbody והסקריפט בא בסופו של הbody
אם זה מתבצע פעם אחת - הקוד עובד
מאמינה שאם תוריד את השאלה על המשתנה mouseDown - הקוד יקרה 10 פעמים בדיוק
לא הבנתי למה לחלק לפולסים בודדים, שירד ישירות את המקסימום או שירד בכך לחיצה כמה בודדים
בשביל שירד עם הפסקות כדאי להתשמש בפונקציות של טיימר ולא בלולאות
 

ש.ב.ח.

משתמש מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
D I G I T A L
אם זה מתבצע פעם אחת - הקוד עובד
מאמינה שאם תוריד את השאלה על המשתנה mouseDown - הקוד יקרה 10 פעמים בדיוק
לא הבנתי למה לחלק לפולסים בודדים, שירד ישירות את המקסימום או שירד בכך לחיצה כמה בודדים
בשביל שירד עם הפסקות כדאי להתשמש בפונקציות של טיימר ולא בלולאות
ברו שאם הייתי רוצה שהחלון יגלל 1000 פיקסלים הייתי נותן אותו ביחידה אחת אבל אני מעוניין בכפתור שיגלול את החלון מטה (וכפתור אחר מעלה) לפי הלחיצה עליו - כל עוד המשתמש לוחץ החלון יגלל (ביחידות קטנות כמובן כמו 10/20 פיקסלים) כשירים המשתמש אצבעו החלון יעמוד.
בקיצור אני מנסה לתת תחליף ל scroll Bar הרגיל של הדפדפן.
 

UU

משתמש סופר מקצוען
הנדסת תוכנה
אוקי, הבנתי
הקוד הבא אמור לעבוד בדיוק כמו שאתה רוצה (הפסקות של חצי שניה בין גלילה לגלילה, אפשר לשנות את הערך - במקום 500 - מה שנראה לך טוב)
גילוי נאות - כתבתי את הקוד בלי להריץ אותו - אם הוא לא עובד - אבדוק לעומק
קוד:
var mouseDown;

document.getElementById("down").onmouseup = function() {
clearInterval(mouseDown);
}
document.getElementById("down").onmousedown =
function(){
doMouseDown()
mouseDown = setInterval(doMouseDown(); }, 500);
}
var doMouseDown = function(){
window.scrollBy({top: 10, left: 0, behavior: 'smooth' });
}
 

ש.ב.ח.

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

רק בעיה קטנה נותרה וצריך שתעזרו לי איך לפתור אותה.
ברגע שהעליית העכבר לא נעשה על האלמנט החלון ימשיך לרוץ עד הסוף, הסיבה פשוטה, על מנת לעצור את הטיימר יש לבצע את עליית העכבר על האלמנט (מה שחייב אותי להשתמש בcss ע"מ שהאלמנט יהיה Sticky).

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

UU

משתמש סופר מקצוען
הנדסת תוכנה
מחליפים
document.getElementById("down").onmouseup
ב:
document.getElementByTagName("body").onmouseup
בהצלחה!
 

ש.ב.ח.

משתמש מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
D I G I T A L
מחליפים
document.getElementById("down").onmouseup
ב:
document.getElementByTagName("body").onmouseup
בהצלחה!
כל עוד המשתמש ירים את העכבר על איזור ריק במסך מה טוב, הבעיה שהוא יכול להרים את העכבר על אלמנט על יד הdown במקרה כזה הטיימר לא יפסיק.

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

ש.ב.ח.

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

מי ידע למצוא את הקוד הנכון?
 

mordy

משתמש מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
D I G I T A L
אולי במקום window תנסו document או document.body
 

ש.ב.ח.

משתמש מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
D I G I T A L
אולי במקום window תנסו document או document.body

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

ועכשיו שני פרטים שנותרו לי לברר:
1. איך גורמים לאייקון להיות בלתי נגרר?

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

*כמו למשל המצב שלי שאני לחצתי על אייקון מסויים (הוא #down) ולאחר מכן אני גרור מעט עם העכבר, בעצם הוא גורר את האייקון ולכל מקום במסך יש אין כניסה - כלומר, אי אפשר לגרור אותו לשם.

עזרתכם בבקשה....
 

mordy

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

אלוווופה

משתמש מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
הנדסת תוכנה
מקפיצה,

s976, mordy, ש.ב.ח., UU

מישהו יכול להגיד לי מה לא טוב בקוד (או אם צריך להוסיף משהו):
מה שיוצא לי:
 

קבצים מצורפים

  • index.html
    497 ביטים · צפיות: 4
  • image.png
    image.png
    KB 197.8 · צפיות: 9

אלעזר 1

צוות הנהלה
מנהל
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
כתיבה ספרותית
עיצוב פונטים
מוזיקה ונגינה
UX UI
D I G I T A L
יוצרי ai

אלוווופה

משתמש מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
הנדסת תוכנה

קבצים מצורפים

  • image (1).png
    image (1).png
    KB 156.7 · צפיות: 7
נערך לאחרונה ב:

אלעזר 1

צוות הנהלה
מנהל
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
כתיבה ספרותית
עיצוב פונטים
מוזיקה ונגינה
UX UI
D I G I T A L
יוצרי ai
נערך לאחרונה ב:

אלעזר 1

צוות הנהלה
מנהל
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
כתיבה ספרותית
עיצוב פונטים
מוזיקה ונגינה
UX UI
D I G I T A L
יוצרי ai
הקוד עצמו עובד מצוין אבל בגלל שהאלמנטים ב-HTML לא מכילים תוכן ולא הוגדר להם height ו-width הם אינם מופיעים בתצוגה
בפעם הבאה שאתם מבקשים עזרה כדאי שתצרפו את הקוד כטקסט חי ולא כתמונה
JavaScript:
(function(){
    for (let i = 0; i < 8; i++) {
        let row = document.createElement('div')
        row.classList.add('row')
        for (let j = 0; j < 8; j++) {
            let square = document.createElement('div')
            square.classList.add('square')
            row.appendChild(square)
            square.style.backgroundColor = color(i, j)
            if(i != 3 && i != 4)
                if(square.style.backgroundColor.value == "black") {
                    let hole = document.createElement('div')
                    hole.classList.add('hole')
                    if(i < 3)
                        hole.style.backgroundColor = "black"
                    else hole.style.backgroundColor = "white"
                    square.appendChild(hole)
                }
        }
        document.querySelector('#board').appendChild(row)
       
    }
})()

function color(i, j) {
    if(i % 2 == 0)
        if(j % 2 == 0)
            return "white";
        else return "black";
    else if (j % 2 != 0)
        return "white";
    return "black";
}
 

אלוווופה

משתמש מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
הנדסת תוכנה
הקוד עצמו עובד מצוין אבל בגלל שהאלמנטים ב-HTML לא מכילים תוכן ולא הוגדר להם height ו-width הם אינם מופיעים בתצוגה
בפעם הבאה שאתם מבקשים עזרה כדאי שתצרפו את הקוד כטקסט חי ולא כתמונה
JavaScript:
(function(){
    for (let i = 0; i < 8; i++) {
        let row = document.createElement('div')
        row.classList.add('row')
        for (let j = 0; j < 8; j++) {
            let square = document.createElement('div')
            square.classList.add('square')
            row.appendChild(square)
            square.style.backgroundColor = color(i, j)
            if(i != 3 && i != 4)
                if(square.style.backgroundColor.value == "black") {
                    let hole = document.createElement('div')
                    hole.classList.add('hole')
                    if(i < 3)
                        hole.style.backgroundColor = "black"
                    else hole.style.backgroundColor = "white"
                    square.appendChild(hole)
                }
        }
        document.querySelector('#board').appendChild(row)
  
    }
})()

function color(i, j) {
    if(i % 2 == 0)
        if(j % 2 == 0)
            return "white";
        else return "black";
    else if (j % 2 != 0)
        return "white";
    return "black";
}

אלעזר 1 יש להם רוחב וגובה, זה בcss:​

קוד:
*{
    box-sizing: border-box;
    background-color: black;
}

#game{
    width: 700px;
    margin: auto;
}

#board{
    width: 640px;
    border: 15px white solid;
    border-radius: 10px;
}

#board > .row{
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    justify-content: space-evenly;
    height: 86px;
}

.square{
    width: 88px;
    height: 88px;
}

.hole{
    width: 80px;
    height: 80px;
    border-radius: 50%;
    border: 3px white solid;
}
תודה על העזרה!!
נ.ב. לדעתי הריבועים מסתירים את העיגולים שיצרתי, איך אפשר להביא צורה קדימה על צורה נוספת??
 
נערך לאחרונה ב:

אלעזר 1

צוות הנהלה
מנהל
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
כתיבה ספרותית
עיצוב פונטים
מוזיקה ונגינה
UX UI
D I G I T A L
יוצרי ai
יתכן שיש לכם הגדרות CSS אחרות שדורסות את הערכים האלו.
זו התוצאה אצלי לפי הקובץ המצורף:
1660146551459.png
 

קבצים מצורפים

  • index (3).html
    KB 2.1 · צפיות: 2

אלוווופה

משתמש מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
הנדסת תוכנה
כמו מה? כי השתדלתי לעשות הכל בcss ולא יותר מידי בjs.
 

אלוווופה

משתמש מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
הנדסת תוכנה
יתכן שיש לכם הגדרות CSS אחרות שדורסות את הערכים האלו.
זו התוצאה אצלי לפי הקובץ המצורף:
צפה בקובץ המצורף 1187054
@אלעזר 1 ניסיתי ליצור את העיגולים בדף נפרד עם אותו סטייל, בלי הריבועים עצמם וכן יצא לי.
אז חשבתי אולי צריך להביא לעיגול משהו שיביא אותו לפני הריבוע, יש משהו כזה?
 

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

הפרק היומי

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


תהילים פרק קיט ק'

קמה קָרָאתִי בְכָל לֵב עֲנֵנִי יְהוָה חֻקֶּיךָ אֶצֹּרָה:קמו קְרָאתִיךָ הוֹשִׁיעֵנִי וְאֶשְׁמְרָה עֵדֹתֶיךָ:קמז קִדַּמְתִּי בַנֶּשֶׁף וָאֲשַׁוֵּעָה (לדבריך) לִדְבָרְךָ יִחָלְתִּי:קמח קִדְּמוּ עֵינַי אַשְׁמֻרוֹת לָשִׂיחַ בְּאִמְרָתֶךָ:קמט קוֹלִי שִׁמְעָה כְחַסְדֶּךָ יְהוָה כְּמִשְׁפָּטֶךָ חַיֵּנִי:קנ קָרְבוּ רֹדְפֵי זִמָּה מִתּוֹרָתְךָ רָחָקוּ:קנא קָרוֹב אַתָּה יְהוָה וְכָל מִצְוֹתֶיךָ אֱמֶת:קנב קֶדֶם יָדַעְתִּי מֵעֵדֹתֶיךָ כִּי לְעוֹלָם יְסַדְתָּם:
נקרא  7  פעמים

לוח מודעות

למעלה