Подтвердить что ты не робот

Есть ли способ вызвать mousemove и получить event.pageX, event.pageY?

Итак, как указывает вопрос, существует ли способ вызвать событие mousemove в jQuery, которое также отправляет координаты мыши объекту события?

Пока мой код может вызвать mousemove с помощью функции .trigger(event), но event.pageX и event.pageY undefined.

4b9b3361

Ответ 1

Я не верю, что можно получить координаты мыши по запросу через JavaScript/jQuery; однако, если вы привяжете позицию к глобальному var, вы можете получить к ним доступ в любое время по всему документу следующим образом:

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

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

function getMousePosition(timeoutMilliSeconds) {
    $(document).one("mousemove", function (event) {
        window.xPos = event.pageX;
        window.yPos = event.pageY;
        setTimeout("getMousePosition(" + timeoutMilliSeconds + ")", timeoutMilliSeconds);
    });
}
getMousePosition(100);

Теперь вы должны иметь доступ к окнам. xPos и ​​window.yPos из любого места в документе, используя любое решение без необходимости запуска события faux.

Ответ 2

Вам нужно установить pageX и pageY непосредственно перед запуском события. Чтобы установить эти свойства, создайте объект jQuery.Event.

// create a jQuery event
e = $.Event('mousemove');

// set coordinates
e.pageX = 100;
e.pageY = 100;

// trigger event - must trigger on document
$(document).trigger(e);

Посмотрите на jsFiddle.

Ответ 3

Я не уверен, что полностью понимаю этот вопрос. Вы можете сделать:

$('.someClass').mousemove(function(event){
    console.log(event.pageX);
    console.log(event.pageY);
});

Теперь, всякий раз, когда мышь перемещается над someClass, он регистрирует корды xy. Здесь jsfiddle, чтобы увидеть его в действии, и документация jquery .

Ответ 4

Вы не можете перемещать мышь, если это то, о чем вы просите. Но вы можете вызвать функцию с любым контекстом и аргументами, которые вы хотите. Например:.

function foobar(e)
{
  this.className = 'whatever'; // this == element
}

someElement.onmousemove = foobar;

var obj = {whatever:'you want'};
foobar.call(someElement, obj); // calls foobar(obj) in context of someElement

Ответ 5

Думаю, я знаю вашу проблему. Вы пытаетесь запросить позицию мыши программно. Возможно, у вас есть код примерно так:

$(document).one('mousemove.myModule', function (e) {
    // e.pageY and e.pageX is undefined.
    console.log('e.pageY: ' + e.pageY + ', e.pageX: ' + e.pageX); }
        ).trigger('mousemove.myModule');

Тогда ты абсолютно прав. Свойства pageY и pageX объекта события не будут определены. Собственно, в объекте события есть дыра, в которой не будет места, а не только .pageY и .pageX. Может быть ошибка в jQuery. В любом случае просто не связывайте этот вызов, чтобы активировать и запуск события на $(window). Не спрашивайте меня, почему это работает, но для меня это:

$(document).one('mousemove.myModule', function (e) {
    console.log('e.pageY: ' + e.pageY + ', e.pageX: ' + e.pageX); } );

// Now e.pageY and e.pageX will be defined!
$(window).trigger('mousemove.myModule');

Ответ 6

Это лучшее, что я мог бы придумать, что не позволяет вам устанавливать глобальные переменные. Событие click по-прежнему будет фиксировать координаты, поэтому вы можете передать это событие в mousemove.

$(element).click(function(e){
  $(element).trigger('mousemove',e);
});

Затем этот объект события будет вторым аргументом в вашей функции mousemove; первый из которых является либо фактическим событием mousemove, либо событием, созданным jQuery.

$(element).mousemove(function(e,clickEvent){
  if typeof e.pageX === 'undefined' e = clickEvent;
  // or if you prefer, clickEvent.pageX;
});