Получить положение мыши при запуске событий фокуса/размытия?

Я использую jQuery для захвата события:

$('input').focus(function(e){

    console.log( e.pageX, e.pageY );

});

Кажется, это не работает ... есть идеи об альтернативных способах получения положения мыши?


Помощь была бы отличной.


person RadiantHex    schedule 02.11.2011    source источник
comment
Я думаю, что вы можете получить координаты мыши только для событий, которые используют мышь - щелчок, dblclick и т. д. Было бы бессмысленно получать координаты мыши, если пользователь фокусируется на вашем вводе, нажимая на клавиатуре.   -  person Blazemonger    schedule 02.11.2011


Ответы (2)


Вы можете получить координаты мыши только с помощью событий мыши. Если вы хотите зафиксировать положение мыши, вы можете использовать глобальный прослушиватель событий mousemove и сохранить координаты в наборе переменных, к которым позже может получить доступ функция focus. Пример:

var pageX, pageY; //Declare these globally
$(window).mousemove(function(e){
    pagex = e.pageX;
    pageY = e.pageY;
});

$('input').focus(function(){
    console.log(pageX, pageY); // These variables have been defined by the global
                               //  mousemove event
});
person Rob W    schedule 02.11.2011
comment
Это единственный способ сделать это, афаик - person Juan Mendes; 02.11.2011
comment
Имелось ли здесь в виду какое-либо событие [мышь]?? .pageX и .pageY можно считать из любого события, а не только из .mousemove(). Например, возможно, вы хотите точно знать, где пользователь щелкнул внутри определенного элемента div: Вот пример, когда мы прослушиваем событие щелчка внутри определенного элемента div с именем #special. docs.jquery.com/Tutorials:Mouse_Position - person jbabey; 02.11.2011
comment
@jbabey Щелчок — это событие мыши. focus не является событием мыши. - person Rob W; 02.11.2011
comment
@RobW правильно, я понимаю и согласен с вами - просто странно, что сайт, на который я ссылался выше, говорит о любом событии, а не о любом событии мыши. - person jbabey; 02.11.2011
comment
@ Энди, я изначально тоже хотел использовать x и y. Затем я подумал, что весьма вероятно, что x или y уже определены внутри функции, вызывая конфликты. Поэтому я решил использовать описательные, но компактные имена переменных pageX и pageY. - person Rob W; 02.11.2011
comment
@RobW Я печально известен среди своих коллег своими описательными именами переменных :) - person Andy; 02.11.2011

Если вы пытаетесь получить позицию относительно элемента, попробуйте вместо этого что-то вроде этого:

$("input").focus(function(e){
    var relativeX = e.pageX - this.offsetLeft;
    var relativeY = e.pageY - this.offsetTop;
});
person James Johnson    schedule 02.11.2011