<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class='mover'></div>
我有这个Plunkr,
这包含一个div
,我在其上绑定了一个keydown
事件。按向右或向左箭头,div应该开始移动。
此方法在所有浏览器中都有效,但是当按键按住时时,立即触发第一个keydown事件(div移动一次),它等待一个时间间隔,然后继续移动。
因此,这意味着一旦触发了keydown
事件,然后浏览器也会等待检测是否还有随后的keyUp
事件,然后在很短的时间(如果没有按键)之后,它将继续触发[ C0]事件。
问题:有没有办法,所以我可以一直按住键,并且div应该立即开始移动,而不必等待检测后续的keyup(once)]
然后,在计时器上,您可以轮询键映射的状态,并按任何键方向移动对象。 可能有一个比轮询更好的解决方案,但是除了轮询之外,我不知道一种方法来测试某个键是否按下。 在键盘上,还需要检查是否需要中断移动对象。 希望这会有所帮助。keydown
$(function() {
$(window).keydown(function(e) {
console.log(e.keyCode)
if (e.keyCode == 39)
move(5, 'left', $('.mover'))
else if (e.keyCode == 37)
move(-5, 'left', $('.mover'))
})
})
function move(offset, direction, target) {
console.log($(target))
$(target).css(direction, (parseInt($(target).css(direction)) + offset) + 'px')
}
.mover {
height: 50px;
width: 50px;
display: inline-block;
background: black;
position: absolute;
left: 0;
}
我有这个Plunkr,它包含一个div,我在该div上绑定了一个keydown事件。按向右或向左箭头,div应该开始移动。在所有浏览器中都可以使用,但是在按下键并......>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class='mover'></div>
$(function() {
var direction,
movingTimeout = -1;
$(window).on('keydown', function(e) {
if (e.keyCode == 39) {
direction = 'right';
} else if (e.keyCode == 37) {
direction = 'left';
}
startMoving(direction);
});
function stopMoving() {
clearTimeout(movingTimeout);
movingTimeout = -1;
}
function startMoving(direction) {
if (movingTimeout === -1) {
loop(direction);
}
}
function loop(direction) {
move(direction === 'left' ? -5 : 5, $('.mover'));
movingTimeout = setTimeout(loop, 10, direction);
}
function move(offset, $target) {
$target.css('left', (parseInt($target.css('left')) + offset) + 'px')
}
$(window).on('keyup', function(e) {
stopMoving();
});
})
if (e.keyCode == 39){
var stop = setInterval(function(){
move(5, 'left', $('.mover'))
}, 25);
window.on("keyup", function(){
//stop the loop
clearInterval(stop);
//and remove the keyup listener
window.off("keyup", arguments.callee);
})
} else if //etc...
+ up
键=“东北”方向:right
干杯!
$(function() {
var direction,
movingTimeout = -1;
$(window).on('keydown', function(e) {
if (e.keyCode == 39) {
direction = 'right';
} else if (e.keyCode == 37) {
direction = 'left';
}
startMoving(direction);
});
function stopMoving() {
clearTimeout(movingTimeout);
movingTimeout = -1;
}
function startMoving(direction) {
if (movingTimeout === -1) {
loop(direction);
}
}
function loop(direction) {
move(direction === 'left' ? -5 : 5, $('.mover'));
movingTimeout = setTimeout(loop, 10, direction);
}
function move(offset, $target) {
$target.css('left', (parseInt($target.css('left')) + offset) + 'px')
}
$(window).on('keyup', function(e) {
stopMoving();
});
})
right