Javascript-ben hogy tudom egy végtelenített ciklus futása közben annak egyik változóját felhasználói beavatkozással módosítani?
bocsi, lehet, hogy nem világos amit akarok, mert eltelt fél óra a kérdés és a leírás megfogalmazása között, és nem figyeltem, hogy mit írtam előtte...
szóval:
a lényeg, hogy egy objektumot a kurzormozgató billentyűkkel szeretnék mozgatni egy területen belül, de úgy, hogy folyamatosan mozogjon az utoljára lenyomott billentyű irányába, de ehhez a gombnyomásokra először meg kéne valahogy állítani, hogy egyszerre csak egy függvény fusson
Egyébként a clearInterval dolog úgy működik, hogy a setInterval-t értékül adod egy változónak, pl:
var timer = setInterval(doSomething, 100);
Ezután a clearInterval-t ezen a változón hívod meg:
clearInterval(timer);
köszi, ezeket én is tudtam, de mindkettővel gondjaim voltak...
előbbinél létrehoztam egy változót a függvényeken kívül, de valamiért nem működött a dolog
nem tudom, hogy tudok rendesen globális változót létrehozni, mert nekem ez korábban is csak úgy sikerült, hogy egy DOM elemhez rendeltem hozzá egy tetszőleges paramétert, és annak adtam egy értéket, de nem szeretnék ilyen fapados megoldást alkalmazni
utóbbinál néhány dolog kérdéses számomra:
- a setInterval függvény alatti sorok lefutnak a késleltetés ideje alatt, vagy csak a függvény megszakítása után?
- az időzítést hol tudom megszakítani? (pl. ahol létre lett hozva, vagy az időzített függvényen belül...)
A setinterval lényege pontosan az, hogy minden fut tovább normálisan, csak bizonyos időközönként lefut a benne megadott függvény. Megszakítani meg bárhol, ahol elérhető a setInterval változója. célszerű globálisan létrehozni.
Amúgy ha függvényen kívül hozol létre változót, az rendes globális változó lesz :D Valamit ott benéztél.
még mindig nem áll meg... hol rontottam el?
-------------------------------------------------------
function keydown(e){
if (!e) var e = window.event;
var num;
player = document.getElementById('player');
if (!player.style.left) player.style.left = '0px';
if (!player.style.top) player.style.top = '0px';
if (e.keyCode == 37 || e.keyCode == 38|| e.keyCode == 39 || e.keyCode == 40) clearInterval(stopmove);
function move(){
if (e.keyCode == 37){ //bal
num = parseInt(player.style.left) - 1;
if (num < 0) num = 0;
player.style.left = num + 'px';
return false;
}
else if (e.keyCode == 38){ //fel
num = parseInt(player.style.top) - 1;
if (num < 0) num = 0;
player.style.top = num + 'px';
return false;
}
else if (e.keyCode == 39){ //jobb
num = parseInt(player.style.left) + 1;
if (num > 750) num = 750;
player.style.left = num + 'px';
return false;
}
else if (e.keyCode == 40){ //le
num = parseInt(player.style.top) + 1;
if (num > 550) num = 550;
player.style.top = num + 'px';
return false;
}
}
setInterval(move, 100);
stopmove = setInterval(move, 100);
}
var stopmove;
document.onkeydown = keydown;
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!