Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Czas przytrzymania klawisza., j/w
wizard144
post 27.01.2010, 08:37:19
Post #1





Grupa: Zarejestrowani
Postów: 138
Pomógł: 3
Dołączył: 4.05.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
skowron-line
post 27.01.2010, 09:53:49
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


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.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
wizard144
post 27.01.2010, 18:27:45
Post #3





Grupa: Zarejestrowani
Postów: 138
Pomógł: 3
Dołączył: 4.05.2009

Ostrzeżenie: (0%)
-----


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

Ten post edytował wizard144 27.01.2010, 21:04:43
Go to the top of the page
+Quote Post
skowron-line
post 27.01.2010, 21:20:54
Post #4





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Pokaż cały kod jaki napisałeś łatwiej będzie Ci wskazać błąd.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
wizard144
post 27.01.2010, 21:45:57
Post #5





Grupa: Zarejestrowani
Postów: 138
Pomógł: 3
Dołączył: 4.05.2009

Ostrzeżenie: (0%)
-----


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 =]

Ten post edytował wizard144 28.01.2010, 20:16:00
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 13:07