Задача простая: есть поле и в нём мяч. Кликаешь куда-то по полю - в место клика перемещается элемент(мяч тобишь)
let field = document.querySelector('#field')
let ball = document.querySelector('#ball')
field.addEventListener('click', function(e){
ball.style.left = e.clientX - field.offsetLeft - ball.width / 2 + 'px'; // Тут всё праивильно
ball.style.top = e.clientY - field.offsetTop - ball.height / 2 + 'px';
// ball.style.left = e.clientX - ball.width / 2 + 'px'
// ball.style.top = e.clientY - ball.height / 2 + 'px' А тут при клике на поле - изобр. улетает куда-то вниз - за пределы поля
})
Не пойму: вот я сначала написал(думал так правильно будет):
ball.style.left = e.clientX - ball.width / 2 + 'px'
ball.style.top = e.clientY - ball.height / 2 + 'px'
По идее, это значит: отступ слева для элемента(мяча) = Координаты клика по X - половинка длины мяча, в px
Вроде бы всё логично, но если кликнуть по Полю - то вместо перемещения в место клика Мяч улетит куда-то вниз за пределы Поля. Не пойму почему
А если добавить - field.offsetLeft, то всё заработает как надо.
А .offsetLeft - это свойство, которое показывает смещение элемента относительно родителя с position(relative, absolute, fixed). А у Поля у меня родитель - body. И у него нет такого position.
В общем не пойму что тут делают field.offsetLeft/field.offsetTop и почему без них не работает, объясните пожалуйста.