代码拉取完成,页面将自动刷新
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div class="player"></div>
<button id="replay">replay</button>
<style>
.player {
position: absolute;
top: 0;
left: 0;
width: 50px;
height: 50px;
background: red;
}
</style>
<script>
let prevTime = Date.now();
class Player {
constructor(dom, speed = 2) {
this.dom = dom;
this.speed = speed;
this.reset();
}
reset() {
this.dom.style.left = 0;
this.dom.style.top = 0;
}
moveLeft() {
const left = parseInt(this.dom.style.left);
console.log(left);
this.dom.style.left = left - this.speed + 'px';
}
moveRight() {
const left = parseInt(this.dom.style.left);
this.dom.style.left = left + this.speed + 'px';
}
moveUp() {
const top = parseInt(this.dom.style.top);
this.dom.style.top = top - this.speed + 'px';
}
moveDown() {
const top = parseInt(this.dom.style.top);
this.dom.style.top = top + this.speed + 'px'
}
}
const player = new Player(document.querySelector('.player'), 10);
const commands = {
w: 'moveUp',
a: 'moveLeft',
s: 'moveDown',
d: 'moveRight',
}
const commandStack = [];
document.addEventListener('keypress', event => {
const command = player[commands[event.key]].bind(player);
if(command) {
command();
const now = Date.now();
commandStack.push({
command,
timeout: now - prevTime,
})
prevTime = now;
}
})
let promise = Promise.resolve();
replay.addEventListener("click", () => {
player.reset();
commandStack.forEach(current => {
promise = promise.then(() => {
return new Promise(resolve => {
setTimeout(() => {
current.command();
resolve();
}, current.timeout)
})
})
})
})
</script>
</body>
</html>
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。