Определить положение мыши вне событий (используя 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;
});
});