Есть ли способ вызвать mousemove и получить event.pageX, event.pageY? - PullRequest
24 голосов
/ 14 октября 2011

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

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

Ответы [ 6 ]

38 голосов
/ 23 января 2013

Вам нужно установить 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 голосов
/ 14 октября 2011

Я не верю, что можно получить координаты мыши по требованию через 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);

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

0 голосов
/ 07 сентября 2013

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

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

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

$(element).mousemove(function(e,clickEvent){
  if typeof e.pageX === 'undefined' e = clickEvent;
  // or if you prefer, clickEvent.pageX;
});
0 голосов
/ 31 октября 2012

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

$(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');
0 голосов
/ 14 октября 2011

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

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
0 голосов
/ 14 октября 2011

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

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

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

...