Определить положение мыши вне событий (используя jQuery)?

Мне нужно получить абсолютную позицию/координаты мыши (X и Y), используя (желательно) jQuery, как в этот учебник, но вне любого события JavaScript. Спасибо.

Ответ 1

Невозможно. Однако вы можете использовать тот же подход в учебнике, чтобы сохранить позицию в глобальной переменной и прочитать ее вне события.

Вот так:

jQuery(document).ready(function(){
   $().mousemove(function(e){
      window.mouseXPos = e.pageX;
      window.mouseYPos = e.pageY;
   }); 
})

Теперь вы можете использовать window.mouseXPos и window.mouseYPos.

Ответ 2

Это началось как комментарий на ответ Chetan Sastry, но я понял, что это также может стоить опубликовать в качестве ответа:

Я был бы осторожен в том, что событие mousemove на уровне документа, всегда работает, даже если вы только проверяете позицию курсора. Это много обработки и может заглушить любой браузер, особенно медленнее, чем IE.

Проблема вроде этого почти наверняка поднимает вопрос о дизайнерском решении: если вам не нужно обрабатывать событие мыши для опроса позиции курсора, действительно ли вам нужна позиция курсора? Есть ли лучший способ решить проблему, которую вы пытаетесь решить?

Изменить: даже в Safari 4, который является (преуменьшением) очень быстрым, это одиночное событие mousemove делает каждое взаимодействие с этой учебной страницей заметно изменчивым для меня. Подумайте, как это повлияет на восприятие пользователями вашего сайта или приложения.

Ответ 3

Эта функция уменьшит влияние на производительность пользовательского интерфейса, только получая позицию мыши с интервалом:

function getMousePosition(timeoutMilliSeconds) {
    // "one" attaches the handler to the event and removes it after it has executed once 
    $(document).one("mousemove", function (event) {
        window.mouseXPos = event.pageX;
        window.mouseYPos = event.pageY;
        // set a timeout so the handler will be attached again after a little while
        setTimeout(function() { getMousePosition(timeoutMilliSeconds) }, timeoutMilliseconds);
    });
}

// start storing the mouse position every 100 milliseconds
getMousePosition(100);

Как и в другом ответе "Теперь вы можете использовать window.mouseXPos и window.mouseYPos из любого места".

Вы теряете небольшую точность, так как перемещение мыши не будет обнаружено во время интервалов.

Ответ 4

Я попробовал @Chetan Sastry soulution, но он не работает (я использую jQuery 1.6.4). Я меняю код, а затем я работаю сейчас. Вот мой код. Надеюсь, это поможет.



    $(document).ready(function(){
       $(document).mousemove(function(e){
          window.mouseXPos = e.pageX;
          window.mouseYPos = e.pageY;
       }); 
    });