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

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

4 ответов


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

такой:

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

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


это началось как комментарий к ответ Четана Састри, но я понял, что это также может быть стоит вывешивать в ответ:

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

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

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


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

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 из любой точки мира."

вы теряете немного точности, так как движение мыши не будет обнаружено во время интервалов.


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



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