spostando la tastiera virtuale

2

Stocreandounatastieravirtualeusandojavascript/html/css.Enonriescoatrovareunbuonalgoritmoperpassaredaunpulsanteall'altroindirezionidiverse(alto-basso,sinistra-destra).Diciamochehoilfocusimpostatosuunoqualsiasideipulsanti-comedovreitrovareilpulsantechedovrebbeesseremessoafuocoinseguito.tuttiipensierieleideesarebberoapprezzati.

Eccounesempiodistrutturadelcodice

rigaconitastifunzionali

<divclass="keyboard-row">
        <a href="#" id="langSwitch" class="largeKey" lang-code="en" data-index="0">ENG</a>
        <div class="charRow">
             <a href="#" class="key" id="key2" data-index="1">1</a>

             <a href="#" class="key" id="key3" data-index="2">2</a>

             <a href="#" class="key" id="key4" data-index="3">3</a>

             <a href="#" class="key" id="key5" data-index="4">4</a>

             <a href="#" class="key" id="key6" data-index="5">5</a>

             <a href="#" class="key" id="key7" data-index="6">6</a>

             <a href="#" class="key" id="key8" data-index="7">7</a>

             <a href="#" class="key" id="key9" data-index="8">8</a>

             <a href="#" class="key" id="key10" data-index="9">9</a>

             <a href="#" class="key" id="key11" data-index="10">0</a>

             <a href="#" class="key" id="key12" data-index="11">_</a>
        </div>
        <a href="#" id="enter" class="largeKey" data-index="12">Search</a>
    </div>

fila solo con caratteri

<div class="keyboard-row">
        <div class="charRow">
             <a href="#" class="key" id="key1" data-index="0">a</a>

             <a href="#" class="key" id="key2" data-index="1">s</a>

             <a href="#" class="key" id="key3" data-index="2">d</a>

             <a href="#" class="key" id="key4" data-index="3">f</a>

             <a href="#" class="key" id="key5" data-index="4">g</a>

             <a href="#" class="key" id="key6" data-index="5">h</a>

             <a href="#" class="key" id="key7" data-index="6">j</a>

             <a href="#" class="key" id="key8" data-index="7">k</a>

             <a href="#" class="key" id="key9" data-index="8">l</a>
        </div>
    </div>

Anche il layout è formato dinamicamente in base alla configurazione del file di lingua. Pertanto, le righe contenenti caratteri di lettere possono avere un numero diverso di tasti in base alla lingua selezionata.

Le chiavi Functianal sono statiche per tutte le lingue. L'impostazione della lingua viene salvata in un oggetto javascript

var langObj = {
......
  row3: [
        {
            value:"q"
        },{

            value:"w"
        },{

            value:"e"
        },....
],
row 4 :[...].....
}

dove ogni proprietà di riga risponde al layout di riga della tastiera

Ho aggiunto l'attributo "data-index" a ogni chiave in una riga come suggerito da Kilian Foth, quindi ora con jquery posso spostarmi orizzontalmente. il codice è successivo (potrebbe essere necessario qualche miglioramento)

   function moveLeft(e){
            e.preventDefault();
            var $el = $(e.target),
                $parentRow = $el.parents(".keyboard-row");

            if(!$el.is($("a:first", $parentRow ))){
                var nextIndex = parseInt($el.attr("data-index")) - 1
                $parentRow.find("[data-index='" + nextIndex + "']").focus();
            }
            else $parentRow.find("a:last").focus();
        }

Ora il problema principale si sta spostando verticalmente. Vorrei suggerire di trovare le coordinate del pulsante attualmente focalizzato e quindi di capire quale pulsante si interseca verticalmente con le coordinate Y con quello corrente e se esiste addirittura. Ma non so ancora come farlo

    
posta Olena Horal 27.11.2014 - 17:07
fonte

1 risposta

2

Mentre risulterebbe molto più codice, non c'è nulla di intrinsecamente sbagliato nell'aggiungere "nextLeft, nextDown, ecc." alle tue chiavi Sarai in grado di assicurarti al 100% quale tasto è prossimo durante la navigazione, quindi tutte le supposizioni sono andate.

Se insisti su una soluzione che utilizza la risoluzione, assegna a ciascun tasto un offset e una larghezza x, quindi, quando viene premuto, sposta la chiave il cui centro è più vicino. Potresti anche non dover definire tali informazioni se sono già visualizzate visivamente nel DOM, esistono già delle proprietà per questo.

    
risposta data 08.12.2014 - 20:27
fonte

Leggi altre domande sui tag