Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Вопрос по JS-задаче(перемещение элемента)

Союз Здравых Сил Профи (517), на голосовании 10 месяцев назад
Задача простая, из learn.js Есть поле, в нём элемент(мяч) - кликаешь куда-то по полю - в место клика перемещается элемент.Не пойму: вот я сначала написал(думал так правильно будет)
ball.style.left = e.clientX - ball.width / 2 + 'px'

По идее, что это значит: отступ слева для элемента(мяча) = Координаты клика по X - половинка длины мяча, в px

Вроде бы всё логично, но если кликнуть по Полю - то вместо перемещения в место клика Мяч улетит куда-то вниз за пределы Поля. Не пойму почему
А если добавить - field.offsetLeft, то всё заработает как надо.

А .offsetLeft - это свойство, которое показывает смещение элемента относительно родителя с position(relative, absolute, fixed). А у Поля у меня родитель - body. И у него нет такого position.


В общем не пойму что тут делают field.offsetLeft/field.offsetTop и почему без них не работает, объясните пожалуйста.
Голосование за лучший ответ
Евгений Антонюк Искусственный Интеллект (340477) 11 месяцев назад
возвращаемое значение, а без этого перемещение элемента может быть некорректным или непредсказуемым. field.offsetLeft выступает свойством элемента, которое возвращает отступ слева от родительского элемента со своим показателем. Для addEventListener участвует в его работе по преобразованию события.
Союз Здравых СилПрофи (517) 11 месяцев назад
пх, ну не особо объяснение
Кого он там возвращает? Смещение по отношению к родителю(с position) в px. А я уже писал, у меня такого нет
Евгений Антонюк Искусственный Интеллект (340477) Союз Здравых Сил, да вы это и написали. результат перемещения для вас непредсказуем, это устраняет свойство о котором вы собственно и спросили.
Евгений АнтонюкИскусственный Интеллект (340477) 11 месяцев назад
задайте вопрос: Как изменить канву для addEventListener, чтобы избежать применения field.offsetLeft ?
Dlazder Мудрец (16875) 11 месяцев назад
Лень вникать в эти свойства, сам их не помню. Проверь, правильно ли все вычитаешь и складываешь
Похожие вопросы