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

StackOverflow https://stackoverflow.com/questions/1133807

Вопрос

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

Это было полезно?

Решение

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

Так:

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

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

Другие советы

Это началось с комментария к Ответ Четана Састри, но я понял, что, возможно, стоит опубликовать это как ответ:

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

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

Редактировать:даже в 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, но оно не работает (я использую jQuery 1.6.4).Я меняю код, и теперь я работаю.Вот мой код.Я надеюсь, это поможет.



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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top