Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Отслеживание координат мышки (https://javascript.ru/forum/misc/1487-otslezhivanie-koordinat-myshki.html)

Воитель 29.07.2008 11:18

Отслеживание координат мышки
 
Здравствуйте.
Мне надо определять координаты мышки, как можно чаще. Воопщем надо следить за курсором, и в его соответсвующих положениях отправлять флэшке занчение переменной.
Нашёл пример, в котором определяют координаты мышки. Почти полностью в нём разобрался, только не пойму почему он выполняет постоянно, раньше я пользовался функицией сеттаймаут(точно не помню как она называется) она выполняла заданную функцию через определённое кол-во времени.А тут я не нашёл ни чего подобного.
Код:

<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>


ZoNT 29.07.2008 11:27

imageMap.onmousemove = moveDot;

Потому что определдение координат повешено на маусмув над картинкой.
Повесь функцию определения координат на документ (document.onmousemove = funcXXX) будет определать координаты постоянно, пока мышка над документом (то бишь, в окне)

Kolyaj 29.07.2008 12:09

Цитата:

Сообщение от ZoNT
пока мышка над документом

пока мышка двигается над документом

ZoNT 29.07.2008 12:14

У меня всё правильно - мышь не двигается - координаты не меняются, двигается - меняются. НО!!! Только если мышь НАД документом (двигается+недвигается).

Или вы считаете, что неподвижность мыши - это уже не информация???

Kolyaj 29.07.2008 14:58

Просто неточное предложение, которое, тем не менее, может ввести в заблуждение: если курсор неподвижен над документом, событие не будет срабатывать, и, соответственно, координаты определяться не будут.

Цитата:

Сообщение от ZoNT
Или вы считаете, что неподвижность мыши - это уже не информация???

Вы не сможете отследить неподвижность мыши, т.к. непонятно, неподвижна она или находится за пределами документа.

ZoNT 29.07.2008 15:01

НАД документом я могу отследить неподвижность мышки!!!

ZoNT 29.07.2008 15:02

Цитата:

Сообщение от ZoNT (Сообщение 4025)
(document.onmousemove = funcXXX) будет определать координаты постоянно, пока мышка над документом (то бишь, в окне)

Тут ясно указано, пока мышка НАД документом, я могу делать что угодно!!!

Kolyaj 29.07.2008 15:12

Конечно можете, но событие onmousemove, как нетрудно догадаться по названию, срабатывает при перемещении указателя над элементом.

ZoNT 29.07.2008 15:28

правильно - маусаута не произошло (мышка НАД документом), маусмува нет - что с мышкой???

Kolyaj 29.07.2008 15:52

ZoNT, согласен, так можно отследить.


Часовой пояс GMT +3, время: 15:36.