Мне нужно получить абсолютную позицию/координаты мыши (X и Y), используя (желательно) jQuery, как в этот учебник, но вне любого события JavaScript. Спасибо.
Определить положение мыши вне событий (используя jQuery)?
Ответ 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;
});
});