Hirdetés

Keresés

Új hozzászólás Aktív témák

  • kispx
    addikt

    Sziasztok,

    A nyers JS-tel való ismerkedés céljából szeretnék egy SPA-t csinálni és tanácsot szeretnék kérni a következő eset megoldására.

    Szóval van egy linkem, amire ha a felhasználó rákattint, akkor a login div-et láthatóvá teszi. Ezt az onclick eventre teszi meg. A probléma akkor van ha nincs engedélyezve a javascript.

    Erre azt gondoltam, hogy a link alapértelmezetten a /login oldalra mutat. (Így ha nincs engedélyezve a JS, akkor a szerver tud statikus HTML oldalt generálni neki) Ha az oldal betöltött, akkor a JS-ből, minden <a> elemre hozzáadok egy onclick event-et. Az event handlerben pedig megvizsgálom, hogy mire mutatott a link, és az alapján módosítom az oldal megjelenését (és végül elnyelem az eventet, hogy ne menjen kérés a szerverhez.)

    Ez mennyire "best-practice"? Van jobb megoldás arra, hogy ha engedélyezve van a JS, akkor mindent helyeben oldok meg, ha nincs akkor meg a server oldalon statikus HTML oldalban az alapfunkciókat nyújtom.

    Válaszokat előre is köszönöm.

  • kispx
    addikt

    Van egy obj1 objektumom amihez hozzáadok egy adattagot:
    Object.defineProperty(obj1, "x", {value: 20, writeable: false});
    Ha jól tudom akkor ha adni akarok neki egyúj értéket akkor TypeError-t kellene dobnia.

    Ezt meg is tettem.
    try{
    obj1.x = 40;
    document.write(obj1.x);
    }
    catch(e){
    document.write(e.name);
    }

    Ami történt: kiírta az obj1.x-et, de 20-at. Nem az kellett volna hogy történjen, hogy kidobja a TypeError-t amit el is kap a kivételkezelés, majd kiírja ennek az Exception-nek a nevét? De nem szakadt meg a try rész futása, és az Exception-t se írta ki.

    Strict módban dobja a kivételt. Oldal közepén lévő példát nézd meg.

  • kispx
    addikt

    Olyan kérdésem lenne a setInterval-al kapcsolatban, hogy hogyan tudok véget vetni ámokfutásának. A kódom elején definiáltam, hogy var endGame = false;, majd van egy ilyenem:

    if(endGame === false){
    setInterval(moveBall, 1);
    }
    else{
    clearInterval(moveBall);
    }

    ami meghív egy ilyet:

    function moveBall(){
    var ball = document.getElementById("ball");
    if(ballRandomStartX === 200){
    xVar = 1;
    }
    if(ballRandomStartY === windowHeight-10){
    yVar = -1;
    }
    if(ballRandomStartY === 10){
    yVar = 1;
    }

    if(ballRandomStartX === windowWidth-110 && (ballRandomStartY >= mouseY && ballRandomStartY <= mouseY+100)){
    xVar = -1;
    pointCounter++;
    document.getElementById("points").innerHTML = pointCounter;
    }
    else{
    endGame = true;
    //xVar = -1;
    }
    ballRandomStartY = ballRandomStartY + yVar;
    ballRandomStartX = ballRandomStartX + xVar;
    ball.style.top = ballRandomStartY;
    ball.style.left = ballRandomStartX;
    }

    Itt ha kimegy a pályáról a labda akkor az endGame true lesz. De a labda csak megy a végtelenségig tovább. Miért van ez? Itt a teljes kód. Itt pedig a teszt.

    Indítsd így: var moveBallIntervalId = setInterval(moveBall, 10000);
    Majd így tudod leállítani: clearInterval(moveBallIntervalId);

    Szerk.:
    Az az if szerkezet csak egyszer fog lefutni. Így inkább a
    else{
    endGame = true;
    //xVar = -1;
    }

    részhez tenném a clearInterval fv-t.

Új hozzászólás Aktív témák