#javascript
Закрыт. Данный вопрос необходимо конкретизировать. Ответы
на него в данный момент не принимаются.
Хотите улучшить этот вопрос? Переформулируйте вопрос,
чтобы он был сосредоточен только на одной проблеме, отредактировав его.
Закрыт 10 месяцев назад.
var field = document.querySelector('#field');
var ball = document.querySelector('#ball');
field.onclick = function(e){
var fieldCoords = this.getBoundingClientRect();
var fieldInnerCoords = {
left: fieldCoords.left + field.clientLeft,
top: fieldCoords.top + field.clientTop
}
ball.style.left = e.clientX - fieldInnerCoords.left + 'px';
ball.style.top = e.clientY - fieldInnerCoords.top + 'px';
}
#field {
width: 150px;
border: 10px groove black;
background-color: #00FF00;
position: relative;
margin: 300px auto;
}
#ball {
position: absolute;
}
. .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
field.onclick происходит событие click первым аргументом всегда будет объект Event
который содержит детали события
У объекта Event есть свойства clientX и clientY которые означают координаты курсора
в момент клика (относительно окна)
В переменную fieldCoords присваиваем объект который содержит координаты элемента field;
Мы хотим чтобы мяч перемещался по полю, но не убегал за поле
Для этого из переменной fieldCoords надо получить свойства которые содержат в переменной
это можно сделать так fieldCoords.left и fieldCoords.top которые запишем соответственно
в left и top
Затем в left и top прибавим рамки для этого есть свойства clientLeft и clientTop
получается field.clientLeft
Мяч у нас находится в переменной ball который позиционирован абсолютно то будет в
левом верхнем углу переменной field
Получаем css cсвойство left и присваиваем координаты курсора в момент клика (относительно
окна) clientX от которого вычитаем переменную fieldInnerCoords которые содержит координаты
элемента относительно окна которому прибавили рамку left: fieldCoords.left + field.clientLeft
и так как left это css свойство ему надо указать единицу измерения желательно в px
так как координаты элемента в пикселях
Правильно я понял что происходит в этой функции ?
Ответы
Ответ 1
Да. Очень хорошее и детальное описание происходящего.Ответ 2
Ошибка в пункте 4. Левый верхний угол картинки с мячом просто переносится в место клика мыши. Какой-то сумбур в пункте 8. Этот пункт можно описать проще: перевод из координат относительно страницы в координаты относительно клиентской части поля.Ответ 3
Не знаю, чего мы хотим, но пункт 4 не совсем соответствует действительности: А так, описание вроде верное.
Комментариев нет:
Отправить комментарий