29.07.2008, 11:18
|
Интересующийся
|
|
Регистрация: 24.06.2008
Сообщений: 26
|
|
Отслеживание координат мышки
Здравствуйте.
Мне надо определять координаты мышки, как можно чаще. Воопщем надо следить за курсором, и в его соответсвующих положениях отправлять флэшке занчение переменной.
Нашёл пример, в котором определяют координаты мышки. Почти полностью в нём разобрался, только не пойму почему он выполняет постоянно, раньше я пользовался функицией сеттаймаут(точно не помню как она называется) она выполняла заданную функцию через определённое кол-во времени.А тут я не нашёл ни чего подобного.
Код:
|
<script type="text/javascript">
<!--
function getCoords() {
// вызывается при перемещении курсора
// над слоем с картой
// координаты слоя с картой
// в окне браузера
imageMapX = findPosX(imageMap);
imageMapY = findPosY(imageMap);
imageMap.onmousemove = moveDot;
imageMap.onmouseover = moveDot;
// точку надо убирать, если курсор
// покинул слой с картой
imageMap.onmouseout = function (){
myDot.style.display='none';
};
// координаты точки надо запомнить
imageMap.onclick = coordsFix;
}
function coordsFix() {
// функция фиксирует координаты точки при клике
// координата X
myForm.coordXfix.value = myForm.coordX.value;
// координата Y
myForm.coordYfix.value = myForm.coordY.value;
// точка показывается
myDot2.style.display='block';
// и позициоируется
myDot2.style.left = myForm.coordX.value+'px';
myDot2.style.top = myForm.coordY.value+'px';
}
function moveDot(cursor) {
// функция перемещения точки над слоем с картой
// точку надо покзать
myDot.style.display='block';
if(!cursor) var cursor = window.event;
myForm.coordX.value = '';
myForm.coordY.value = '';
var x = 0;
var y = 0;
if (cursor.pageX || cursor.pageY) {
x = cursor.pageX;
y = cursor.pageY;
}
else if (cursor.clientX || cursor.clientY) {
x = cursor.clientX + document.body.scrollLeft;
y = cursor.clientY + document.body.scrollTop;
}
x -= imageMapX;
y -= imageMapY;
x -= dX;
y -= dY;
// для наглядности координаты точки
// показываются во временых полях формы
// справа "X" и "Y"
(x < 0) ? myForm.coordX.value = 0 : myForm.coordX.value = x;
(y < 0) ? myForm.coordY.value = 0 : myForm.coordY.value = y;
// если курсор не покинул слой с картой,
// точка перемещается с курсором
if (x>0 && y>0 && x<mapWdt && y<mapHgt) {
myDot.style.left = x+"px";
myDot.style.top = y+"px";
}
}
function getObj(name) {
// функция захвата объекта, используется при инициализации
if (document.getElementById) return document.getElementById(name);
else if (document.all) return document.all[name];
else if (document.layers) return document.layers[name];
else return false;
}
function findPosX(obj) {
// X-координата слоя
var currleft = 0;
if (obj.offsetParent)
while (obj.offsetParent) {
currleft += obj.offsetLeft
obj = obj.offsetParent;
}
else if (obj.x) currleft += obj.x;
return currleft;
}
function findPosY(obj) {
// Y-координата слоя
var currtop = 0;
if (obj.offsetParent)
while (obj.offsetParent) {
currtop += obj.offsetTop
obj = obj.offsetParent;
}
else if (obj.y) currtop += obj.y;
return currtop;
}
function init() { // инициализация
// смещение для точки
dX = 7;
dY = 7;
// форма
myForm = getObj('mapForm');
// слой с картой
imageMap = getObj('schemePlace');
imageMap.onmouseover = getCoords;
// ширина и высота слоя - смещение
// чтобы точка за пределы картинки
// даже не думала уходить
mapWdt = imageMap.offsetWidth - dX;
mapHgt = imageMap.offsetHeight - dY;
// точки
myDot = getObj('magDot');
myDot2 = getObj('magDot2');
}
// ожидание загрузки страницы
// и вызов функции инициализации
try {
window.addEventListener('load', init, false);
} catch(e) {
window.onload = init;
}
//-->
</script> |
|
|
29.07.2008, 11:27
|
Флудер
|
|
Регистрация: 25.07.2008
Сообщений: 1,271
|
|
imageMap.onmousemove = moveDot;
Потому что определдение координат повешено на маусмув над картинкой.
Повесь функцию определения координат на документ (document.onmousemove = funcXXX) будет определать координаты постоянно, пока мышка над документом (то бишь, в окне)
|
|
29.07.2008, 12:09
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от ZoNT
|
пока мышка над документом
|
пока мышка двигается над документом
|
|
29.07.2008, 12:14
|
Флудер
|
|
Регистрация: 25.07.2008
Сообщений: 1,271
|
|
У меня всё правильно - мышь не двигается - координаты не меняются, двигается - меняются. НО!!! Только если мышь НАД документом (двигается+недвигается).
Или вы считаете, что неподвижность мыши - это уже не информация???
|
|
29.07.2008, 14:58
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Просто неточное предложение, которое, тем не менее, может ввести в заблуждение: если курсор неподвижен над документом, событие не будет срабатывать, и, соответственно, координаты определяться не будут.
Сообщение от ZoNT
|
Или вы считаете, что неподвижность мыши - это уже не информация???
|
Вы не сможете отследить неподвижность мыши, т.к. непонятно, неподвижна она или находится за пределами документа.
|
|
29.07.2008, 15:01
|
Флудер
|
|
Регистрация: 25.07.2008
Сообщений: 1,271
|
|
НАД документом я могу отследить неподвижность мышки!!!
|
|
29.07.2008, 15:02
|
Флудер
|
|
Регистрация: 25.07.2008
Сообщений: 1,271
|
|
Сообщение от ZoNT
|
(document.onmousemove = funcXXX) будет определать координаты постоянно, пока мышка над документом (то бишь, в окне)
|
Тут ясно указано, пока мышка НАД документом, я могу делать что угодно!!!
|
|
29.07.2008, 15:12
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Конечно можете, но событие onmousemove, как нетрудно догадаться по названию, срабатывает при перемещении указателя над элементом.
|
|
29.07.2008, 15:28
|
Флудер
|
|
Регистрация: 25.07.2008
Сообщений: 1,271
|
|
правильно - маусаута не произошло (мышка НАД документом), маусмува нет - что с мышкой???
|
|
29.07.2008, 15:52
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
ZoNT, согласен, так можно отследить.
|
|
|
|