Извлечение местоположений мыши за пределами обработчика событий - PullRequest
0 голосов
/ 10 мая 2009

Как я могу получить местоположение мыши вне назначенной ей функции обработчика событий

Например, если Event.MOUSEMOVE = somefuction, как мне сказать ...

someOtherFunction( maybeSomeParams )
{
    getCurrentMouseLocn();
}

или

someOtherFunction( maybeSomeParams )
{
    mouseXLocn = ?; 
    mouseYLocn = ?;
}

Ответы [ 3 ]

1 голос
/ 10 мая 2009

К сожалению, нет способа получить местоположение курсора мыши вне обработчика событий. Один из вариантов, который у вас есть, - это зарегистрировать обработчик события для события onmousemove и сохранить координаты в глобальной переменной (ish).

Используя простой старый javascript, следующий код должен справиться с Safari и FF3.

var coords = {x: NaN, y: NaN};

...

if (coords.x === ... && coords.y === ...) {
   /* insert your magic here */
}

...

window.addEventListener('mousemove', function(e) { 
    coords.x = e.clientX;
    coords.y = e.clientY;
}, true);

Короче говоря, прослушиватель событий (обработчик) зарегистрирован для события "onmousemove". Когда происходит событие, анонимная функция вызывается вместе с событием. Событие содержит несколько свойств, два из которых - clientX и clientY. Это координаты мыши относительно окна, а не верхней части документа. Эти координаты помещаются в переменную, доступную как для обработчика, так и для кода, которому нужны координаты. Это может быть глобальная или какая-то закрытая переменная.

Следует отметить, что обычно реализации javascript в браузерах являются однопоточными. Проще говоря, это означает, что значения, содержащиеся в переменной coords, могут не всегда быть актуальными, если мышь перемещалась с момента последнего вызова обработчика события.

1 голос
/ 10 мая 2009

Самый простой способ - захватить событие перемещения мыши и сохранить положение в глобальной переменной.

Если он уже захвачен, вы можете сделать:

var oldFunction = document.onmousemove;
document.onmousemove = function(e)
{
    // save x & y here...

    return oldFunction(e);
}
0 голосов
/ 10 мая 2009

С помощью jQuery вы можете иметь положение мыши в любых событиях:

$('#example').click(function(e){
   var x = e.pageX;
   var y = e.pageY;
   // ...
});

Больше информации здесь: http://docs.jquery.com/Tutorials:Mouse_Position Это может помочь. В противном случае используйте событие mousemove для сохранения последней позиции x / y в глобальных переменных.

...