» »

Java script -> Navigacija s smernimi tipkami

Java script -> Navigacija s smernimi tipkami

tadejp81 ::

Pozdravljeni,

ponovno se oglašam, imam še eno težavo, ki bi jo rad rešil na kar se da eleganten način.

Imam en projekt, kjer bi želel celotno "spletno stran" krmiliti zgolj s smernimi tpkami in gumbom enter, torej kliki z miško ne pridejo v poštev.

Vključil sem naslednjo kodo, ki posluša vnose iz tipkovnice:

window.addEventListener("keydown", keydown, false);
function keydown(e) {
	if(e.keyCode == 39) {
		moveRight();
	}
	else if(e.keyCode == 37) {
		moveLeft();
	}
	else if(e.keyCode == 40) {
		moveUp();
	}
	else if (e.keyCode == 38) {
		moveDown();
	}		
}


Zanima me, kako bi najenostavneje skomponiral funkcijo recimo moveUp(), da bi poiskala in fokusirala najbljižji zgornji element na trenutni strani.

Imam sicer rešitev, s katero bi vsak element posebej indeksiral z x, y parametri in potem izvedel funkcijo getElementById("x10y20").focus(), v primeru, da je trenutno fokusiran element "x10y19", vendar verjamem, da obstaja še kakšna druga, bolj čista rešitev.

Prosim za kakšen predlog, če kdo ve.

Hvala že v naprej,
Tadej

Baja ::

gor/dol/levo/desno sploh ne rabiš, ker browserji že po defaultu premikajo stran na te tipke. drugače probaj poiskati kakšen jquery scroll funkcijo. kjer verjetno lahko določiš do kam se naj zapelje.

lp

tadejp81 ::

Živjo, Baja.

Ne vem, če sem dovolj natančno opisal težavo, vendar jaz ne potrebujem funkcije scrollanja strani, ampak fokusiranje določenih elementov na strani. Celotno stran bom imel vidno v enem samem oknu in se ne bo scrollala. Smerne tipke pa bi uporabljal za fokusiranje določenih elementov na strani, tako kot lahko to storimo s tipko "Tab". V glavnem v browserju, kjer bom imel projekt prikazan, so smerne tipke brez povezave neaktivne.

Hvala.

Baja ::

aha. probaj kaj v tem stilu.

pseudo jquery koda: predpostvljam da mas neko "tabelo" z inputi.

if (desno) then $(this).nextSibling().focus()
if (levo) then $(this).prevSibling().focus()

if (up) then
currentColumn = $(this).getColNuM() // preberes trenutno kolono od nekje - verjetno z jqueryja lahko dobis pozicijo siblinga al pa zapises v id, class, ...
$(this).parents().prevSibling().children(currentColumn).focus // pogledas parent (vrstica), greš enega nazaj, in dolocis fokus na childrenu, ki ustreza koloni v vrstici kjer si stisnil up

za down obrnes formulo.

upam da je dokaj razumljivo :/

win64 ::

Kaj pa je cilj te navigacije s tipkovnico?
Premikanje po tabeli, meniju, .. ?

tadejp81 ::

V bistvu bo ta brskalnik pognan na TV zaslonu, kjer pač ne bo miške. Za navigacijo bi se uporabljal samo daljinec, ki posilja iste inpute kot tipkovnica.

Torej celotno stran moram navigirati samo s smernimi tipkami levo, desno, gor, dol in tipko OK (kot enter).
To se seveda da resiti, da se izpise celoten algoritem, samo to ti pobere zeloveliko casa. Iscem preprostejso resitev, ce seveda obstaja.

Baja ::

vse kar rabis je 5 funkcij. gor, dol, levo, desno in enter. vse ostalo je isto kot bi delal z miško.

maš že kakšen html source?

lebdim ::

a pa ni celo v JavaScriptu nekaj v zvezi s funkcijami mouseX, mouseY ? Mogoče kaj s tem poizkusiš?

tadejp81 ::

Baja,

težava je ker nimam določene nobene tabele z inputi. Po tebeli je zelo enostavno navigirat, se da narediti kot si dal na primeru (imaš dejansko kot neko matrico - simetrija). Ta moj HTML source je precej kompleksen.

Jaz sem razmišljal tudi v tej smeri, da bi vsak element s povezavo na strani označil z ID ki bi nosil koordinate npr.
<a id="link-x10-y20">Link1</a>
. To bi pomenilo, da se element nahaja nekje na območju koordinate x=10, y=20, potem pa bi funkciji MoveDown določil, da najde prvi naslednji element koordinate y, ki je večji od 20. Če bi našel npr. "25", bi se sfokusiral na element
<a id="link-x10-y25">
:)
Tako nekako, ni pa to neka čista rešitev. Bom pa primoran nekaj narediti.

youPlonker ::

Lahko tudi v javasciptu narediš 2D matriko, kjer imaš shranjene vse položaje tvojih elementov (v koordinatah x, y). Potem ob premikanju ne gledaš za sosednost v DOM, temveč v js matriko.

garamond ::

Uporabi kodo iz tukaj.
- vključiš še svojo kodo za vnos iz tipkovnice
- če imaš svoj html narejen tako, da so tipke kot button, spremeni kodo da ti ne bo treba pisati zraven še classa - ampak da ti sam izbere vse elemente vrste button
- vrstni red premikanja bo verjetno kar vrstni red iz html-ja
A parody of extremism is impossible to differentiate from sincere extremism.

Baja ::

Nekako si boš mogel logično urediti elemente po katerih želiš preklaplati. lahko tudi z id-ji kot si dal primer zgoraj, vendar boš moral še peš malo računati. Če imaš možnost si uredi neko "tabelo". lahko so to tudi paragraphi za vrstice, a-ji za kolone, kakorkoli, glavno da ti v glavi veš kateri element predstavlja vrstico in kateri kolono. potem lahko traversaš po tem z genreičnimi funkcijami brez računanja x in y.

npr: ceprav ni popolna tabela, se da tudi po tem traversati brez problema.

<p><a>1.1</a><a>1.2</a><a>1.3</a></p>
<p><a>2.1</a><a>2.2</a><a>2.3</a></p>
<p><a>3.1</a></p>
<p><a>4.1</a>4.2</a></p>

tadejp81 ::

Hvala vsem za trud in pomoč. Imam dovolj informacij, nekaj bom oz. sem delno že ustvaril.

Hvala še enkrat vsem in lep dan.

Tadej


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Java] Zasnova shoot em up igre

Oddelek: Programiranje
111103 (782) PecenkA
»

Jquery scrollable menu keyboard navigacija

Oddelek: Izdelava spletišč
5660 (547) Binji
»

[c#]izvajanje kode

Oddelek: Programiranje
13977 (711) LeQuack
»

javascript submit

Oddelek: Pomoč in nasveti
10785 (686) misek
»

C# - keypress

Oddelek: Programiranje
201546 (1277) urkrajnc

Več podobnih tem