问题:
长按键盘输入内容时中间会有一个停顿(短暂的)
个人猜测(如有错误欢迎指正):
- 这个问题并不是浏览器带来的,因为你在Word、写字板里面连续输入一个字符,同样会出现这个问题。
- 可能是因为键盘驱动或者操作系统本身为了避免用户连击误输入而故意设计成这样的,毕竟连续输入一个字符的时候并不多。
思路
- 我们首先监听第一次的keydown事件,然后添加一个定时器,在keydown持续发生的时间里不断的调用相应的函数,直到keyup事件发生,这时清除定时器,不再调用函数。
<style>
#div1 {
width: 100px;
height: 100px;
background: #CCC;
position: absolute;
}
</style>
<script>
window.onload = function () {
var oDiv = document.getElementById("div1");
var direction = {
left: false,
top: false,
right: false,
bottom: false
}; //上下左右
setInterval(function () {
if (direction.left) {
oDiv.style.left = oDiv.offsetLeft - 1 + 'px';
} else if (direction.top) {
oDiv.style.top = oDiv.offsetTop - 1 + 'px';
} else if (direction.right) {
oDiv.style.left = oDiv.offsetLeft + 1 + 'px';
} else if (direction.bottom) {
oDiv.style.top = oDiv.offsetTop + 1 + 'px';
}
}, 1);
document.onkeydown = function (ev) {
var oEvent = ev || event;
//← 37 ↑38 →39 ↓40
switch (oEvent.keyCode) {
case 37:
direction.left = true;
break;
case 38:
direction.top = true;
break;
case 39:
direction.right = true;
break;
case 40:
direction.bottom = true;
break;
}
document.onkeyup = function () {
direction = {
left: false,
top: false,
right: false,
bottom: false
};
}
}
}
</script>
<body>
<div id="div1"></div>
</body>
效果图
- 这里可以看出移动时是没有明显卡顿的
应用
- 好像就游戏中控制人物移动的时候用的多一点,其他地方还没怎么见过,算有点鸡肋了
- 感谢阅读!