2016-05-12 14 views
0

So begann ich eine Website zu erstellen (html, css, js ..) und ich möchte meine Website so gestalten, dass es für jemanden ohne Maus (nur eine Tastatur) möglich ist, es zu benutzen.vollständige Website-Steuerung mit Tastatur (keine Maus)?

Wenn ich ein div oder li Element haben, wie kann ich es Fokus mit Tab oder Pfeil nach unten auf der Tastatur bekommen machen?

Beispiel:

<ul class="nav-ul"> 
<li> 
    <a href="" class="nav-link" id="link-home">1 
     <img src="assets/home.png"> 
    </a> 
</li> 
<li> 
    <a href="" class="nav-link" id="link-home">2 
     <img src="assets/home.png"> 
    </a> 
</li> 
<li> 
    <a href="" class="nav-link" id="link-home">3 
     <img src="assets/home.png"> 
    </a> 
</li> 
<li> 
    <a href="" class="nav-link" id="link-home">4 
     <img src="assets/home.png"> 
    </a> 
</li> 
<li> 
    <a href="" class="nav-link" id="link-home">5 
     <img src="assets/home.png"> 
    </a> 
</li> 
<li> 
    <a href="" class="nav-link" id="link-home">6 
     <img src="assets/home.png"> 
    </a> 
</li> 
<li> 
    <a href="" class="nav-link" id="link-home">7 
     <img src="assets/home.png"> 
    </a> 
</li> 

Hier möchte ich jedes li Element den Fokus zu gewinnen, wenn Pfeil nach unten auf der Tastatur gedrückt wird.

EDIT:
tabindex funktioniert nicht! Ich habe es auf viele verschiedene Arten versucht. Ich möchte den gleichen Effekt haben wie wenn ich darüber schwebe.

EDIT 2

Also werde ich meine Frage klar machen. Ich möchte NICHT Tab verwenden, sondern es wird ein D-Pad (links, rechts, oben und unten Pfeile).

Vielen Dank.

+1

tabindex http://stackoverflow.com/questions/13637223/how-do-you-make-a-div-tabbable –

+0

Ich habe es versucht, als ich dies posten. Funktioniert nicht. Ich möchte, dass es dieselbe Wirkung hat, wenn ich es mit der Maus schwenke. Ich sehe keine Änderungen mit Tabindex –

+0

Es gibt einige Referenz hier für Tastendruckereignis bestimmten Pfeil nach unten: http: // stackoverflow.com/questions/19347269/jquery-keypress-arrow-keys –

Antwort

1

Die einfachste Möglichkeit, dies zu erreichen, ist die Verwendung des Attributs tabindex.

<li> 
    <a href="" class="nav-link" id="link-home" tabindex='7'>7 
     <img src="assets/home.png"> 
    </a> 
</li> 

prüfen einige Beispiele here

EDIT mit linken und rechten Pfeil Navigation:

document.addEventListener("keydown", function (e) { 
    var focused = document.activeElement || document.body, 
     focusables= document.getElementsByClassName("focusable"), 
     len = focusables.length, 
     step = 0; 
    focusables = Array.from(focusables).sort(function(a,b) { 
     return parseInt(a.tabIndex) - parseInt(b.tabIndex); 
    }); 
    if (e.keyCode === 39) { 
     step = 1 
    } 
    if (e.keyCode === 37) { 
     step = -1 
    } 

    if (focused.tabIndex <0 || focused.tabIndex === len - 1 && step === 1) 
     focusables[0].focus() 
    else if (focused.tabIndex === 0 && step === -1) 
     focusables[len-1].focus() 
    else 
     focusables[focused.tabIndex+step].focus() 
}); 

Alles, was Sie tun müssen, ist Ihre Elemente so zu machen:

<a href="" class="nav-link focusable" id="link-home" tabindex="0">1 
    <img src="assets/home.png"> 
</a> 

Klasse Hinzufügen focusable und Einstellung tabindex Arbeits example

+0

Bitte beachten Sie meinen Kommentar unter der Frage. Vielen Dank –

+1

Werfen Sie einen Blick hier http://codepen.io/anon/pen/mPoZmd klicken Sie auf Leerraum unter Ihrer Liste und drücken Sie die Tabs. Beobachten Sie, welches Listenelement fokussiert wird – jano

+0

Ok, ich verstehe. Ich habe meine Frage bearbeitet. Tut mir leid, ich war nicht klar. Bitte beachten Sie EDIT 2 in meiner Frage –

1

Ist das, was Sie suchen?

var target = 1; 
 
downarrow(); 
 
uparrow(); 
 
function downarrow() { 
 
    $(document).keydown(function(e){ 
 
    if (e.keyCode == 40) { 
 
     $('#' + target).addClass('active'); 
 
     $('#' + target).focus(); 
 
     $('a').not($('#' + target)).removeClass('active'); 
 
     target++; 
 
    } 
 
    if (target === 8) { 
 
    target = 1; 
 
    }; 
 
    }); 
 
}; 
 
function uparrow() { 
 
    $(document).keydown(function(e){ 
 
    if (e.keyCode == 38) { 
 
     target--; 
 
     if (target === 0) { 
 
     target = 7; 
 
     }; 
 
     $('#' + target).addClass('active'); 
 
     $('#' + target).focus(); 
 
     $('a').not($('#' + target)).removeClass('active'); 
 
    } 
 
    }); 
 
};
a.active { 
 
    background-color: #b2b2b2; 
 
    outline: 1px solid red ; 
 
} 
 

 
a { 
 
    display: inline-block; 
 
    width: 100%; 
 
    height: 100%; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<ul class="nav-ul"> 
 
<li> 
 
    <a id="1" href="" class="nav-link" id="link-home">1 
 
     <img src="assets/home.png"> 
 
    </a> 
 
</li> 
 
<li> 
 
    <a id="2" href="" class="nav-link" id="link-home">2 
 
     <img src="assets/home.png"> 
 
    </a> 
 
</li> 
 
<li> 
 
    <a id="3" href="" class="nav-link" id="link-home">3 
 
     <img src="assets/home.png"> 
 
    </a> 
 
</li> 
 
<li> 
 
    <a id="4" href="" class="nav-link" id="link-home">4 
 
     <img src="assets/home.png"> 
 
    </a> 
 
</li> 
 
<li> 
 
    <a id="5" href="" class="nav-link" id="link-home">5 
 
     <img src="assets/home.png"> 
 
    </a> 
 
</li> 
 
<li> 
 
    <a id="6" href="" class="nav-link" id="link-home">6 
 
     <img src="assets/home.png"> 
 
    </a> 
 
</li> 
 
<li> 
 
    <a id="7" href="" class="nav-link" id="link-home">7 
 
     <img src="assets/home.png"> 
 
    </a> 
 
</li>

https://jsfiddle.net/jpjr1nbt/5/

Bemerkungen:

Wenn Sie auch Pfeil nach oben bis blättern. der keyCode ist 38

+0

das ist großartig! Ich bevorzuge es einfach (ohne Ajax), also entschied ich mich für die Antwort von xosjasx. Vielen Dank! –

Verwandte Themen