Я изучаю JS и пытаюсь перемещать квадрат, изменяя параметры `transform` в блоке div для координат X и Y. У меня возникла проблема - при клике на одну кнопку блок перемещается только по оси X, как и должно быть, но при клике на другую кнопку блок перемещается и по оси X, и по оси Y, хотя должен перемещаться только по оси Y. Подскажите, где может быть ошибка в коде. https://codepen.io/zocdoobn-the-selector/pen/ExrNBxR
Ошибка в коде заключается в том, что переменные `posTop` и `posLeft` объявлены глобально, и их значения накапливаются после каждого клика на кнопку, что приводит к неправильному передвижению блока. Чтобы исправить ошибку, объявите эти переменные внутри обработчика события `click` для каждой кнопки: ```javascript document.getElementById("button1").addEventListener("click", function () { var posTop = 0; var posLeft = 0; posTop -= 50; document.getElementById("square").style.transform = "translate(" + posLeft + "px, " + posTop + "px)"; }); document.getElementById("button2").addEventListener("click", function () { var posTop = 0; var posLeft = 0; posLeft += 50; document.getElementById("square").style.transform = "translate(" + posLeft + "px, " + posTop + "px)"; }); ``` Теперь при клике на кнопку блок будет перемещаться только по указанным осям.
const steps = [ 0, 0 ]; const stepSize = 30; const box = document.querySelector('#box'); document.querySelectorAll('[data-step]').forEach(n => n.addEventListener('click', onClick)); function onClick() { this.dataset.step.split(',').forEach((n, i) => steps[i] += +n); box.style.transform = `translate(${steps.map(n => n * stepSize + 'px').join(',')})`; }
function getCurrentOffset(s) { return s.split(",", 2).map((n) => Number(n.replace(/\D/g, ""))); } function right2_m() { const box = document.getElementById("box"); let [left, top] = getCurrentOffset(box.style.transform); box.style.transform = `translate(${left+30}px,${top}px)`; } function bottom2_m() { const box = document.getElementById("box"); let [left, top] = getCurrentOffset(box.style.transform); box.style.transform = `translate(${left}px,${top+30}px)`; }