@Norwood

Почему offsetTop отрабатывает некорректно?

В квадрате есть круг. С помощью кнопок вверх/вниз/вправо/влево перемещаю его на заданный шаг. Кнопка влево и вверх работают нормально, а вот влево и вниз- круг улетает максимально влево или вниз. Предполагаю, что дело вот в этом знаке "+"
offsetTop + `${step}`
Может кто-нибудь поможет разобраться в чём тут дело?
  • Вопрос задан
  • 37 просмотров
Решения вопроса 1
@n1ksON
Интерн
Все дело в том, что вы зачем-то числу пытаетесь прибавить не число, а строку. Получается так: 1 + '1' = 11 (number + string = string), с вычитанием работает нормально: 1 - '1' = 0 (number - string = number)
const divSquare = document.querySelector('.square');
const circle = document.querySelector('.circle');
// divSquare.hidden = false;

document.querySelector('.nbt').onclick = () => {
  const inp1 = document.querySelector('.width').value;
  divSquare.style.border = "1px solid black";
  divSquare.style.width = `${inp1}px`;
  divSquare.style.height = `${inp1}px`;
  divSquare.style.position = 'relative';
}

document.querySelector('.btnz').onclick = () => {
  const inp3 = document.querySelector('.width1').value;
  circle.style.width = `${inp3}px`;
  circle.style.height = `${inp3}px`;
  circle.style.borderRadius = "100%";
  circle.style.background = "rgba(0, 0, 0, .3)";
  circle.style.position = 'absolute';
  circle.style.top = '50%';
  circle.style.left = '50%';
  circle.style.transform = 'translate(-50%, -50%)';
}

document.querySelector('.btnGroup').addEventListener('click', event => {
  let step = +document.querySelector('.width2').value;
  let action = event.target.innerText;
    switch (action) {
      case "Up":
        circle.style.top = circle.offsetTop - step + 'px';
        break;
      case "Left":
        circle.style.left = circle.offsetLeft - step + 'px';
        break;
      case "Down":
        circle.style.top = circle.offsetTop + step + 'px';
        break;
      case "Right":
        circle.style.left = circle.offsetLeft + step + 'px';
        break;
    }
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Intspirit Краснодар
от 80 000 до 150 000 ₽