Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czas przytrzymania klawisza.
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
wizard144
Witam!

Mam pewien problem. Otóż mam kod w JS ściślej mówiąc fragment funkcji która ma sie wykonać gdy ktoś wciśnie przycisk na klawiaturze. Wszystko pieknie tylko że problem polega na tym - jeśli ktoś przytrzyma przycisk to funkcja zacznie wykonywać sie za szybko. Potrzebny mi jakiś licznik czasu przytrzymania czy coś w tym stylu...


Może jakoś z set interval ?

Jeśli niejasno sie wyjaśniłem zapisze to w pseudokodzie

Kod
if(przycisk_down == TRUE)
{
co 2 sekundy wykonaj funkcję
}


lub ewentualnie

Kod

funkcja pierwsza()
{
var czas=licz_czas_przytrzymania_przycisku;
ilosc=czas%2;
nastepna(ilosc);
}
funkcja nastepna(ilosc_1)
{

while(ilosc_1 > 0)
{
wykonuj cos_Tam;
ilosc_1-1;
}

}


ale najbardziej chodzilo by mi o to aby podczas przytrzymania przycisku co 2-3 sekundy wykonywala sie jakas czynnosc... myslalem jescze nad takim rozwiazaniem

Kod

var sec=getSeconds();

if (sec%3 == 0)
{
cos_tam_sobie_rob;
}


Jakies pomysly ?

Z góry dziękuję za pomoc.
skowron-line
Na onKeypress uruchamiasz setInterval który odpala funkcję co x sek a na onKeyup ( jeżeli się nie mylę ) kasujesz zmienną do której przypisałeś interval.
wizard144
hmmm poniewaz dopiero sie ucze JS to tak tylko względem konsultacji

nie wiem czy dobrze rozumuje ale...

Kod
var zmienna = setInterval(function (){ to co ma sie wykonac}, 2000});

//***********************************************************

if(document.onKeyUp == TRUE)
{
clearInterval(zmienna);
}


tak ? czy cos zepsulem ? w JS niestety muszę się jeszcze troche pobawic...

-==EDIT==-

Po zrobieniu tego w ten sposob jest problem, otoz - jesli przycisk jest nacisniety to odpala sie kilka interwałów... Czyli beznadzieja ogólnie rzecz biorąc bo funkcja wykonuje mi sie x razy + interwał na każdym co 2 sekundy.

Nie mam pojecia jak sobie z tym poradzic
skowron-line
Pokaż cały kod jaki napisałeś łatwiej będzie Ci wskazać błąd.
wizard144
Kod
var x=4;
var y=1;
var kierunek=39;

document.onkeydown = checkKeycode;

function checkKeycode(e){


var d = new Date();
var sec=d.getSeconds();
var msec=d.getMilliseconds();

if(sec%2==0 && ((msec > 0 && msec < 200) || (msec > 500 && msec < 600))|| (msec > 800 && msec < 999))
{
var keycode;

if (window.event) keycode = window.event.keyCode;
else if (e) keycode = e.which;

var     x_pom=x;
var     y_pom=y;

switch(keycode)
{
case 37:
var x1=x-1;
var y1=y;
break;

case 38:
var y1=y-1;
var x1=x;
break;

case 39:
var x1=x+1;
var y1=y;
break;

case 40:
var y1=y+1;
var x1=x;
break;
}

if(x1==0)
{
x1=1;
}
if(x1==11)
{
x1=10;
}
if(y1==0)
{
y1=1;
}
if(y1==11)
{
y1=10;
}
ye=y1-1;

var id=ye*10+x1;

var id1=(y_pom-1)*10+x_pom;


advAJAX.post({

            url:\"xxx/projekt_edytor_map/idz.php\",
    
        parameters : {
        'id' : id
        },

        onSuccess : function(obj) {
        var krok=obj.responseText;
        
        if(krok == 0)
{
x=x_pom;
y=y_pom;
}else{
document.getElementById(id1).innerHTML='';
if(keycode == 37)
{
document.getElementById(id).innerHTML='<font color=\"white\"><</font>';
kierunek=37;
x=x1;
y=y1;
}
if(keycode == 38)
{
document.getElementById(id).innerHTML='<font color=\"white\">/\\\</font>';
kierunek=38;
x=x1;
y=y1;
}
if(keycode == 39)
{
document.getElementById(id).innerHTML='<font color=\"white\">></font>';
kierunek=39;
x=x1;
y=y1;
}
if(keycode == 40)
{
document.getElementById(id).innerHTML='<font color=\"white\">V</font>';
kierunek=40;
x=x1;
y=y1;
}

if(keycode == 32)
{
shoot(x,y,kierunek);
document.getElementById(id).innerHTML='O';
}
document.getElementById(id).style.border='none';
}

        },

        onError : function(obj) {;}

});




}
}

Obecny skrypt.

a nizej to z interwałem


Kod
var x=4;
var y=1;
var kierunek=39;

document.onkeydown = checkKeycode;

function checkKeycode(e){


var d = new Date();
var sec=d.getSeconds();
var msec=d.getMilliseconds();

var idInterval = setInterval(
function{
{
var keycode;

if (window.event) keycode = window.event.keyCode;
else if (e) keycode = e.which;

var     x_pom=x;
var     y_pom=y;

switch(keycode)
{
case 37:
var x1=x-1;
var y1=y;
break;

case 38:
var y1=y-1;
var x1=x;
break;

case 39:
var x1=x+1;
var y1=y;
break;

case 40:
var y1=y+1;
var x1=x;
break;
}

if(x1==0)
{
x1=1;
}
if(x1==11)
{
x1=10;
}
if(y1==0)
{
y1=1;
}
if(y1==11)
{
y1=10;
}
ye=y1-1;

var id=ye*10+x1;

var id1=(y_pom-1)*10+x_pom;


advAJAX.post({

            url:\"xxx/projekt_edytor_map/idz.php\",
    
        parameters : {
        'id' : id
        },

        onSuccess : function(obj) {
        var krok=obj.responseText;
        
        if(krok == 0)
{
x=x_pom;
y=y_pom;
}else{
document.getElementById(id1).innerHTML='';
if(keycode == 37)
{
document.getElementById(id).innerHTML='<font color=\"white\"><</font>';
kierunek=37;
x=x1;
y=y1;
}
if(keycode == 38)
{
document.getElementById(id).innerHTML='<font color=\"white\">/\\\</font>';
kierunek=38;
x=x1;
y=y1;
}
if(keycode == 39)
{
document.getElementById(id).innerHTML='<font color=\"white\">></font>';
kierunek=39;
x=x1;
y=y1;
}
if(keycode == 40)
{
document.getElementById(id).innerHTML='<font color=\"white\">V</font>';
kierunek=40;
x=x1;
y=y1;
}

if(keycode == 32)
{
shoot(x,y,kierunek);
document.getElementById(id).innerHTML='O';
}
document.getElementById(id).style.border='none';
}

        },

        onError : function(obj) {;}

});




}, 1000);
}
}


No i do tego jeszcze musze onKeyUp zrobic ale tez nie mam jakos pojecia jak.

EDIT:

Mam jeszcze pomysl, fakt ze mniej funkcjonalny, ale poki co powinien poradzic. Zrobic to za pomoca onKeypress. Czytalem ze to dziala przy krotkotrwalym wcisnieciu jakiegos klawisza. Niestety nie mogę odczytać kodu klawisza na onkeypress :| nie umiem chyba cos zle robie O.o

EDIT 2:

Ajax rządzi, do zamknięcia =]
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.