Javascript segítséget kérhetek?
Nincs nagyon aktív magyar javascriptes fórum, ezért tőletek is megkérdezem, többen többet tudnak alapon.
Javascripttel/Jquery-vel (vagy ha tudtok jó libraryt, nekem az is jó) szeretnék mozgatni egy tárgyat a képernyőn a
szimpla WSAD billentyűkombinációkkal (ha lenyomom, akkor menjen, ha nem nyomom akkor ne menjen). Nyilván vannak a keydown keyup eventek, amikre szépen fel lehet iratkozni, de a probléma csak ezután jelentkezik.
Van az a windows-os jelenség, hogy ha leütünk egy billentyűt, akkor utána vár egy kicsit, és csak utána veszi be a leütést
sorozatosan egymás után. Ebből kifolyólag az elemem először egy kicsit megindul, vár, és utána kezd csak el az adott irányba
elmozdulni. Azt szeretném elintézni, hogy ha lenyomom a D-t akkor menjen jobbra, szépen rendesen ahogy kell neki.
amikkel eddig próbálkoztam:
-Jelenleg nem csinálok mást, csak a margin-left-jét növelem, ha keydown-t érzékel.
-A Position függvény nem jött be, mert azzal nem tudom elintézni, hogy simán menjen jobbra, az gyorsít, lassít,
szakaszosan veszi be az inputot stb (vagyis ugyanez a probléma ott is fennáll).
Ha persze be lehet ezt rendesen konfigurálni, hogy úgy működjön ahogy én akarom, az király lenne.
- Megpróbáltam, hogy setinterval-al csinálok egy végtelen ciklust, (setinterval nélkül si próbáltam magában az eseményben), ami ha érzékeli a rightDown globális változón, hogy true, akkor fut, ha nem true, akkor nem fut (a változó állítását nyilván a keydown, keyup eseményekkor állítom). A probléma a végtelen ciklusos megoldással az (azon felül hogy erőforrásigényes), hogy valamiért nem rajzolja
ki on the fly a képernyőre az eredményt, de ha beledebuggolok a végtelen ciklusba, akkor látom, hogy kiteszi (mintha nem lenne ideje
kirajzolni, mert időközben változik az értéke)--> (bár ezt cáfolja, hogy amikor a setintervalt 2 mp-re raktam, akkor se rajzolta).
Ha van valamilyen elfogadott kliensoldali módszer erre, légyszi segítsetek, mert tényleg sok időt belefeccöltem.
ui.: igyekszem kerülni a nagyon elborult javascript library-kat, mert csak a mozgatás miatt nem akarok behívni egy egész libraryt. (persze ha nincs más megoldás, akkor nyilván az is jó).
Köszi előre is.
A végtelen ciklussal az a baj, hogy a böngésző csak a ciklus lefutása után fogja a képernyőre kirajzolni a változást.
Tegyük fel, hogy x _sebességgel_ akarod mozgatni. Gondolom ez a cél.
Tehát mondjuk 3 pixel / sec. Sebességgel.
Ezt pedig 30 frame / sec frissítéssel akarod kirajzolni.
Ami azt jelenti, hogy 1/10 másodpercenként kell mozgatnod.
Ehhez használhatsz egy setInterval-t.
Azt így kell használni: setInterval(function(){alert("Hello")},100);
Ahol értelemszerűen a függvényt arra kell kicserélni, amit a te programod fog csinálni. A 100 pedig 1/10 másodperc, mert ezredmásodpercben kell megadni.
Interval helyett ezt használd:
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!