Вы пропустили кавычку (") в атрибуте стиля тега img
. Я исправляю это в приведенном ниже коде.
Важно
Я настоятельно рекомендую вам выполнить рефакторинг кода, чтобы его было легче строить и отлаживать. Я покажу, как это можно сделать в приведенном ниже коде. Методы "move" очень похожи, поэтому вы можете написать одну функцию для обработки всех их, вместо того, чтобы иметь отдельные методы, которые делают почти то же самое.
Реализация
Вам нужно удалить все классы, прежде чем добавлять новые, или у вас будет много классы в элементе * 1013. * Но если вы удалите классы, position: fixed
исчезнет, поэтому я разбил это свойство и поместил его под #app
в CSS. Я также переместил ваши свойства "style" в CSS class - #robot
.
Я также переименовал «move» в «moveRobot». Дает больше контекста, когда методы вызываются moveTopLeft
в методе moveRobot.
I также убрал последний ноль в го e CSS классов, так что робот будет виден, когда вы запускаете сниппет.
Внизу я реализовал ваши мысли, но закомментировал все setTimeouts
, так что легче следить за тем, что продолжается. Вы обнаружите, что если вы удалите классы, переход не произойдет, потому что #app
не запоминает последнюю позицию left
и top
.
. Что вам действительно нужно, так это установить left
и top
в коде (например, appDiv.styles.left = '300px'
), и отказаться от идеи добавления классов для робота. Я считаю, что это также сделает код короче.
const appDiv = document.getElementById("app"); // Make this public so it's accessible everywhere;
var lastKeyStroke = -1;
var moveRobot = function(event) {
const KEY_NUM_ONE = 49,
KEY_NUM_TWO = 50;
let keyStroke = event.keyCode;
let pressedSameKeyTwice = keyStroke === lastKeyStroke; // not implemented
removeAllPreviousClasses();
console.clear();
if (keyStroke === KEY_NUM_ONE) {
console.log("pressed 1");
moveTopLeft();
}
else if (keyStroke === KEY_NUM_TWO) {
console.log("pressed 2");
moveTopRight();
}
else {
console.log("pressed anything else");
moveBottomRight();
}
lastKeyStroke = keyStroke;
}
function removeAllPreviousClasses() {
appDiv.className = "";
}
function moveTopLeft() {
//setTimeout(function() {
appDiv.classList.add("robot_end_top");
//}, 0);
//setTimeout(function() {
appDiv.classList.add("robot_end_left");
//}, 2000);
}
function moveTopRight() {
//setTimeout(function() {
appDiv.classList.add("robot_end_top");
//}, 0);
//setTimeout(function() {
appDiv.classList.add("robot2_end_left");
//}, 2000);
}
function moveBottomRight() {
//setTimeout(function() {
appDiv.classList.add("robot3_end_down");
//}, 2000);
//setTimeout(function() {
appDiv.classList.add("robot3_end_right");
//}, 0)
//setTimeout(function() { window.location.reload(true); }, 4000);
// removed excessive ending curly bracket
// }
}
body {
height: 100%;
width: 100%;
background-image: url("TPHRG floorplan1.png");
background-repeat: no-repeat;
background-attachment: fixed;
background-size: 980px 400px, cover;
}
#app {
position: fixed;
transition: left 2s, top 2s;
}
#robot { /* added these */
width: 30px;
height: 40px;
}
.robot3_end_down, /* added these together */
.robot_start_top {
top: 28px;
}
.robot_start_left {
left: 60px;
}
.robot_end_left {
left: 57px;
}
.robot_end_top {
top: 18px;
}
.robot1_start_left {
left: 57px;
}
.robot2_start_left, /* added these together */
.robot1_end_left {
left: 52px;
}
.robot2_end_left {
left: 47px;
}
.robot3_end_right {
left: 60px;
}
<body onkeydown="moveRobot(event)">
<div class="robot_start_left robot_start_top" id="app">
<img id="robot" src="https://simpleicon.com/wp-content/uploads/android.png">
</div>
</body>