As zzzzBov explained, the HTML accesskey
defines a key that will be trapped only when it is combined with the ALT key. That is why that is not useful for trapping any key alone.
But you have to take special care choosing the event to trap the cursor keys because Webkit has decided not to trap them with the keypress
event as it is not in the standard. At this moment the other 3 answers here use this keypress
event and that is why they don't work in Google Chrome nor Safari, but if you change that to keydown
they'll work on all browsers.
You can use this jQuery code to capture the keydown
event of the left, right, up, and down arrow keys:
$(window).keydown(function(e) {
switch (e.keyCode) {
case 37: // left arrow key
case 38: // up arrow key
e.preventDefault(); // avoid browser scrolling due to pressed key
// TODO: go to previous image
return;
case 39: // right arrow key
case 40: // up arrow key
e.preventDefault();
// TODO: go to next image
return;
}
});
And in the following code snippet you can see and run a complete example in which images are swapped using the keys or the buttons.
var currentImage = 0;
var imagesArray = [
'https://upload.wikimedia.org/wikipedia/commons/thumb/3/35/Tux.svg/150px-Tux.svg.png',
'https://upload.wikimedia.org/wikipedia/commons/thumb/8/80/Wikipedia-logo-v2.svg/150px-Wikipedia-logo-v2.svg.png',
'https://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/Git-logo.svg/150px-Git-logo.svg.png'
];
function hasPrev() {
return currentImage > 0;
}
function hasNext() {
return currentImage < imagesArray.length - 1;
}
function goToPrev(e) {
e.preventDefault();
if (!hasPrev())
return;
currentImage -= 1;
updateScreen();
}
function goToNext(e) {
e.preventDefault();
if (!hasNext())
return;
currentImage += 1;
updateScreen();
}
function updateScreen() {
$('#imgMain').attr('src', imagesArray[currentImage]);
$('#btnPrev').prop('disabled', !hasPrev());
$('#btnNext').prop('disabled', !hasNext());
}
$(document).ready(function() {
updateScreen();
$('#btnPrev').click(goToPrev);
$('#btnNext').click(goToNext);
});
var keyCodes = {
left: 37,
up: 38,
right: 39,
down: 40
};
$(window).keydown(function(e) {
switch (e.keyCode) {
case keyCodes.left:
case keyCodes.up:
goToPrev(e);
return;
case keyCodes.right:
case keyCodes.down:
goToNext(e);
return;
}
});
button:enabled kbd {
color: green;
font-weight: bold;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="btnPrev">
Previous Image
<br/>
<small>(arrow keys: <kbd>left</kbd> or <kbd>up</kbd>)</small>
</button>
<button id="btnNext">
Next Image
<br/>
<small>(arrow keys: <kbd>right</kbd> or <kbd>down</kbd>)</small>
</button>
<br/>
<img id="imgMain" src="">
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…