我如何检测当一个方向键被按下?我用这个找到了答案:
function checkKey(e) {
var event = window.event ? window.event : e;
console.log(event.keyCode)
}
虽然它适用于所有其他键,但它不适用于方向键(可能是因为浏览器默认情况下应该在这些键上滚动)。
我如何检测当一个方向键被按下?我用这个找到了答案:
function checkKey(e) {
var event = window.event ? window.event : e;
console.log(event.keyCode)
}
虽然它适用于所有其他键,但它不适用于方向键(可能是因为浏览器默认情况下应该在这些键上滚动)。
当前回答
如果你使用jquery,你也可以这样做,
$(document).on("keydown", '.class_name', function (event) {
if (event.keyCode == 37) {
console.log('left arrow pressed');
}
if (event.keyCode == 38) {
console.log('up arrow pressed');
}
if (event.keyCode == 39) {
console.log('right arrow pressed');
}
if (event.keyCode == 40) {
console.log('down arrow pressed');
}
});
其他回答
与键和ES6。
这为您提供了一个单独的功能,每个方向键,而不使用开关,也适用于2,4,6,8键在NumLock是在numpad。
const element = document.querySelector("textarea"), ArrowRight = k => { console.log(k); }, ArrowLeft = k => { console.log(k); }, ArrowUp = k => { console.log(k); }, ArrowDown = k => { console.log(k); }, handler = { ArrowRight, ArrowLeft, ArrowUp, ArrowDown }; element.addEventListener("keydown", e => { const k = e.key; if (handler.hasOwnProperty(k)) { handler[k](k); } }); <p>Click the textarea then try the arrows</p> <textarea></textarea>
你需要按下键,而不是按下键。
假设你想在按下键的同时连续移动一些东西,我发现除了Opera以外,所有浏览器都可以按下键。对于Opera,按键只在第一次按下时触发。为了适应Opera的使用:
document.onkeydown = checkKey;
document.onkeypress = checkKey;
function checkKey(e)
{ etc etc
如果你使用jquery,你也可以这样做,
$(document).on("keydown", '.class_name', function (event) {
if (event.keyCode == 37) {
console.log('left arrow pressed');
}
if (event.keyCode == 38) {
console.log('up arrow pressed');
}
if (event.keyCode == 39) {
console.log('right arrow pressed');
}
if (event.keyCode == 40) {
console.log('down arrow pressed');
}
});
这是chrome和firefox的工作代码
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
<script type="text/javascript">
function leftArrowPressed() {
alert("leftArrowPressed" );
window.location = prevUrl
}
function rightArrowPressed() {
alert("rightArrowPressed" );
window.location = nextUrl
}
function topArrowPressed() {
alert("topArrowPressed" );
window.location = prevUrl
}
function downArrowPressed() {
alert("downArrowPressed" );
window.location = nextUrl
}
document.onkeydown = function(evt) {
var nextPage = $("#next_page_link")
var prevPage = $("#previous_page_link")
nextUrl = nextPage.attr("href")
prevUrl = prevPage.attr("href")
evt = evt || window.event;
switch (evt.keyCode) {
case 37:
leftArrowPressed(nextUrl);
break;
case 38:
topArrowPressed(nextUrl);
break;
case 39:
rightArrowPressed(prevUrl);
break;
case 40:
downArrowPressed(prevUrl);
break;
}
};
</script>
</head>
<body>
<p>
<a id="previous_page_link" href="http://www.latest-tutorial.com">Latest Tutorials</a>
<a id="next_page_link" href="http://www.zeeshanakhter.com">Zeeshan Akhter</a>
</p>
</body>
</html>
可能是最简洁的表述:
document.onkeydown = function(e) {
switch (e.keyCode) {
case 37:
alert('left');
break;
case 38:
alert('up');
break;
case 39:
alert('right');
break;
case 40:
alert('down');
break;
}
};
演示(感谢用户Angus Grant): http://jsfiddle.net/angusgrant/E3tE6/
这应该可以跨浏览器工作。如果有浏览器无法使用,请留下评论。
还有其他方法来获取键代码(e.c iwhich, e.c arcode和window。事件而不是e),但它们不应该是必要的。你可以在http://www.asquare.net/javascript/tests/KeyCode.html上尝试其中的大部分。 注意这个事件。keycode在Firefox中不与onkeypress一起工作,但它与onkeydown一起工作。