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, согласен, так можно отследить.

EugenyK 20.10.2008 23:25

Немного не по этому вопросу, просто не хочу на этот вопрос создавать новую тему:

вопрос по поводу подсказок, которые плавают за указателем мыши при наведении на элемент - в ФФ3.0 достаточно плавно перемещаясь за указателем, а в IE6.0 смотрю что процессор загружен на 99% и всё начинает жутко тормозить и дёргаться. Вот тут при наведении, скажем на процессор, я сделал появляющуюся подсказку http://digitalpersona.ru/position_62.html
Скрипт я взял с ресурса art.webobzor.net

Вот весь используемый на дигиталперсоне.ру код
function showHelp(ev, obj, id){
	obj.className = 'mon';
	var MouseX = ev.clientX + document.documentElement.scrollLeft;
	var MouseY = ev.clientY + document.documentElement.scrollTop + 15;
	var div = document.getElementById(id);
	div.style.top = MouseY + "px";
	div.style.left = MouseX + "px";
	div.style.visibility = "visible";
}
function hideHelp(ev, obj, id){
	obj.className = 'moff';
	document.getElementById(id).style.visibility = "hidden";
}


<style>
div.float_help {
	background-color: #c7cdcd;
	border: 1px solid #9e180f;
	left: 0px;
	padding: 10px;
	position: absolute;
	opacity: 0.88;
	visibility: hidden;
	width: 300px;
	}
</style>

<span class="moff" onmousemove="showHelp(event, this, 'proc')"
onmouseout="hideHelp(event, this, 'proc')">Процессор</span>

<div class='float_help' id="proc">Процессор - ....</div>


Удивляет, что в сложном extjs приложении такая задаче реализована так что не подвешивает намертво CPU http://extjs.com/deploy/dev/examples...ets/qtips.html (Mouse Track) в IE6.0


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