02.07.2009, 10:42
|
Интересующийся
|
|
Регистрация: 02.07.2009
Сообщений: 15
|
|
обработчик onMouseMove
Помогите модифицировать функцию JavaScript!
В HTML документе есть тег div id = "middle_bg", в него вложен div id = "img".
Img содержит картинку, размеры которой больше middle_bg.
Функция mouseMove - обработчик на OnMouseMove, двигает img внутри middle_bg.
Каким образом можно модифицировать функцию, чтобы при достижении границы middle_bg тегом img, img дальше не двигался, т.е. чтобы не было свободного пространства и угол img не двигался дальше угла middle_bg?
function mouseMove(ev){
ev = ev || window.event;
var mousePos = mouseCoords(ev); //получаем координаты мыши
if(dragObject){
dragObject.style.position = 'relative';
var middle_bg=document.getElementById('middle_bg');
var middle_bg_coords = getPosition(middle_bg);
var img=document.getElementById('img');
var img_coords = getPosition(img);
dragObject.style.top = mousePos.y - mouseOffset.y - middle_bg_coords.y;
dragObject.style.left = mousePos.x - mouseOffset.x - middle_bg_coords.x;
return false;
}
}
|
|
02.07.2009, 10:55
|
Интересующийся
|
|
Регистрация: 02.07.2009
Сообщений: 15
|
|
Если строчку
dragObject.style.top = mousePos.y - mouseOffset.y - middle_bg_coords.y;
заменить например таким
if (map_coords.y <= middle_bg_coords.y)
{
dragObject.style.top = mousePos.y - mouseOffset.y - middle_bg_coords.y;
}
то если сначала двигать картинку вверх, а затем вниз, то она останавливается у верхнего края, однако дальнейшие попытки сдвинуть картинку вверх остаются безрезультатными, и картинка как бы прилипает к верхнему краю и вверх не передвигается
Помогите, пожалуйста, исправить код...
|
|
02.07.2009, 10:59
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
if (map_coords.y < middle_bg_coords.y)
|
|
02.07.2009, 11:02
|
Интересующийся
|
|
Регистрация: 02.07.2009
Сообщений: 15
|
|
такой вариант работает только для первого раза...затем картинка как-бы прилипает к верхней границе и повертикали не двигается...в чем может быть дело?
|
|
02.07.2009, 11:04
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Проверяешь если y<0, ставишь её в 0. Т.е. нада возвращать её туда, где проверка будет давать false, чтобы можно было таскать.
|
|
02.07.2009, 11:07
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
ах, да... Забыл кое-что.
Алгоритм, значт, такой:
1. Присваиваем новое значение.
2. Проверяем, не вышла ли картинка за пределы
3. Если вышла - возвращаем назад.
|
|
02.07.2009, 11:54
|
Интересующийся
|
|
Регистрация: 02.07.2009
Сообщений: 15
|
|
if (map_coords.y <= middle_bg_coords.y)
{
dragObject.style.top = mousePos.y - mouseOffset.y - middle_bg_coords.y;
}
else
{
dragObject.style.top = 0;
}
При таком коде при движении мышью картинка дрожит, т.е. как бы пытается вернуться к верхнему краю...
Если отпускаю кнопку мыши, она иногда притягивается к верхнему краю, иногда нет ... от чего это зависит не пойму
|
|
02.07.2009, 12:00
|
Интересующийся
|
|
Регистрация: 02.07.2009
Сообщений: 15
|
|
if (map_coords.y <= middle_bg_coords.y)
{
dragObject.style.top = mousePos.y - mouseOffset.y - middle_bg_coords.y;
}
else
{
dragObject.style.top = 0;
dragObject = null;
}
при таком варианте (когда обнуляю dragObject) работает нормально, однако чтобы передвигать в другую сторону приходится заново цеплять мышкой...
не можете подсказать рациональное решение как от этого избавиться?
|
|
02.07.2009, 13:47
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Ты не методом тыка делай, а умом.
Допустим ты двигаешь элемент по Y вверх. Тебе нада чтобы он не заходил выше нуля. Когда происходит событие, сначала присваиваешь новые значения. К примеру новое значение -10. После этого Делаешь проверку. В ней проверяешь - если твой объект находится там, где он НЕ должен быть, только тогда отправляешь его туда, где находится граница возможного расположения объекта, т.е. 0. Делать проверку вида y<=0 неправильно, т.к. 0 находится в области, в которой объект МОЖЕТ быть. Для понимания сего ты должет чётко представлять это в голове.
|
|
02.07.2009, 13:51
|
Интересующийся
|
|
Регистрация: 02.07.2009
Сообщений: 15
|
|
а каким образом отрабатывает обработчик события mousemove? при каждом перемещении мыши хотя бы на пиксель или после прекрашения движения?
|
|
|
|