javascript - 单击键盘箭头后重置 setinterval
问题描述
嗨,我想用 setinterval 移动汽车之类的东西,但是当我在再次调用 setinterval 后单击按钮时,它的速度看起来比单击后要快,所以我想使用一个间隔而不是更多可以帮助我吗?我知道在我之前回答了这个问题,但它对我不起作用,或者我不能使用它,我对此感到非常厌倦
//variables
var m_tank = document.getElementById("tank");
//var message = document.getElementById("show_car_info");
var iv, a, s;
//functions
function loaded() {
alert("hello");
}
function start_game(e) {
a = 0;
//for (s = 5000; s == 0; s -= 5) {}
if (e.keyCode == 37 || e.keyCode == 38 || e.keyCode == 39 || e.keyCode == 40) {
s = 1000;
iv = setInterval(() => {
moving(m_tank);
}, s);
}
}
function moving(m_tank) {
a += 10;
var l_num = m_tank.offsetLeft;
var t_num = m_tank.offsetTop;
if (e.keyCode == 39) {
//alert("ArrowRight");
l_num += a;
console.log("right:" + l_num, "a_right:" + a);
} else if (e.keyCode == 37) {
//alert("ArrowLeft");
l_num -= a;
console.log("left:" + l_num, "a_left:" + a);
} else if (e.keyCode == 38) {
//alert("ArrowUp");
t_num -= a;
console.log("Up:" + t_num, "a_up:" + a);
} else if (e.keyCode == 40) {
//alert("ArrowDown");
t_num += a;
console.log("Down:" + t_num, "a_down:" + a);
}
m_tank.style.left = l_num + "px";
m_tank.style.top = t_num + "px";
}
body {
background-color: lightsteelblue;
font-family: Arial, Helvetica, sans-serif;
text-align: center;
overflow: hidden;
}
#tank {
width: 100px;
height: 100px;
position: absolute;
top: 50%;
left: 50%;
background-color: brown;
}
<body onload="loaded()" onkeydown="start_game(e=event)">
<!-- <p id="show_car_info"></p> -->
<div>
<div id="tank">
<p>tank</p>
</div>
</div>
</body>
解决方案
推荐阅读
- node.js - 一起发送 JSON 和 blob
- android - 为什么我的 RecyclerView 只包含 1 个项目?
- scala - 我可以在 Scala 中获得扩展类的名称吗?
- javascript - 是否可以在同一行中垂直放置多个单元格
- javascript - 即使编码的值发生变化,Base64 代码也保持不变
- java - Hibernate - 使用复合键持久化 @OneToOne
- blogdown - 更改博客主题(blogdown+netlify)
- python - 如何根据数据库中的列数据更改 URL
- ruby-on-rails - 从活动存储中删除所有数据?
- android - 应用程序在模拟器上运行但不在手机上运行?