Опитвам се да поставя някаква основна анимация на jQuery върху елемент, базиран на едно или множество събития на натискане на клавиш със стрелка. Целта е да се анимира елементът в посоката на клавиша/клавишите, които са били натиснати. Следвах подхода, който беше обсъден тук за откриване на многократно натискане на клавиши. Но по някаква причина, когато са натиснати няколко клавиша, кодът за еднократно натискане на който и да е от клавишите се изпълнява на случаен принцип заедно с кода за многократно натискане на клавиши. Но ако коментирам кода от ред 25-41, събитията от многократно натискане на клавиши работят според очакванията. Не мога да разбера какво не е наред.
var key = [];
$(document).keydown(function(e) {
key[e.which] = true;
}).keyup(function(e) {
if (key[37] && key[38]) {
$('.box').animate({
'top': '-=50px',
'left': '-=50px'
}, 250);
} else if (key[39] && key[40]) {
$('.box').animate({
'top': '+=50px',
'left': '+=50px'
}, 250);
} else if (key[38] && key[39]) {
$('.box').animate({
'top': '-=50px',
'left': '+=50px'
}, 250);
} else if (key[37] && key[40]) {
$('.box').animate({
'top': '+=50px',
'left': '-=50px'
}, 250);
} else if (key[37]) {
$('.box').animate({
'left': '-=50px'
}, 250);
} else if (key[38]) {
$('.box').animate({
'top': '-=50px'
}, 250);
} else if (key[39]) {
$('.box').animate({
'left': '+=50px'
}, 250);
} else if (key[40]) {
$('.box').animate({
'top': '+=50px'
}, 250);
}
key[e.which] = false;
});
* {
margin: 0;
padding: 0;
}
.container {
border: 1px solid #ccc;
height: 250px;
margin: 49px;
position: relative;
width: 250px;
}
.box {
background-color: #ccc;
height: 50px;
left: 50%;
margin: -25px 0 0 -25px;
position: absolute;
top: 50%;
width: 50px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="container">
<div class="box"></div>
</div>