javascript - 窗口 addEventListener keydown 不起作用
问题描述
我正在编写一个游戏,当您按下箭头键时,立方体会在屏幕上移动。但它不起作用。有人可以帮帮我吗?
var playerElement = document.getElementById('playerEl');
var playerY = 0;
var playerX = 0;
window.addEventListener('keydown', function(e) {
switch (e.keyCode) {
case 37:
playerX -= 100;
playerElement.style.transform = "translate(" + playerX + '%,' + playerY + "%);";
break;
case 38:
playerY -= 100;
playerElement.style.transform = "translate(" + playerX + '%,' + playerY + "%);";
break;
case 39:
playerX += 100;
playerElement.style.transform = "translate(" + playerX + '%,' + playerY + "%);";
break;
case 40:
playerY += 100;
playerElement.style.transform = "translate(" + playerX + '%,' + playerY + "%);";
break;
}
}, true);
#playerEl {
width: 50px;
height: 50px;
background: grey;
display: inline-block;
transform: translate(1%, 1%);
}
<body style="height:100vh;width:100vw;">
<div id="playerEl"></div>
</body>
解决方案
使用 javascript设置transform
style
属性时,您不必;
在字符串中添加 a。
应该这样做:
playerElement.style.transform = "translate(" + playerX + '%,' + playerY + "%)";
这是您;
在transform
字符串中没有的代码。
var playerElement = document.getElementById('playerEl');
var playerY = 0;
var playerX = 0;
window.addEventListener('keydown', function(e) {
switch (e.keyCode) {
case 37:
playerX -= 100;
playerElement.style.transform = "translate(" + playerX + '%,' + playerY + "%)"; // Removed semi-colon from string
break;
case 38:
playerY -= 100;
playerElement.style.transform = "translate(" + playerX + '%,' + playerY + "%)"; // Removed semi-colon from string
break;
case 39:
playerX += 100;
playerElement.style.transform = "translate(" + playerX + '%,' + playerY + "%)"; // Removed semi-colon from string
break;
case 40:
playerY += 100;
playerElement.style.transform = "translate(" + playerX + '%,' + playerY + "%)"; // Removed semi-colon from string
break;
}
}, true);
#playerEl {
width: 50px;
height: 50px;
background: grey;
display: inline-block;
transform: translate(1%, 1%);
}
<body style="height:100vh;width:100vw;">
<div id="playerEl"></div>
</body>
推荐阅读
- javascript - await 是否适用于 sequelize.model 或 .findOne?
- r - R - 需要帮助按列关键字或按关键字分组,然后循环使用 if else 计算并合并或取消分组
- azure - 如何通过驻留在同一 Vnet 中的应用服务从 Azure VM 数据磁盘读取数据?
- angular - 正则表达式拒绝服务:hosted-git-info
- python - 获取 Python 程序错误:未定义 x
- r - 如何使用 R 中的特定模型进行回归?
- c# - 使用嵌套对象和中间步骤进行反序列化
- terraform - 在与 databricks 提供程序相同的配置中使用 databricks 工作区
- operating-system - 为进程安装信号处理程序?能不能说明下不能卸载?
- angular - RxJS 用另一个 Observable 中的值过滤一个 observable