Есть ли способ вызвать mousemove и получить event.pageX, event.pageY?
Итак, как указывает вопрос, существует ли способ вызвать событие mousemove в jQuery, которое также отправляет координаты мыши объекту события?
Пока мой код может вызвать mousemove с помощью функции .trigger(event), но event.pageX и event.pageY undefined.
Ответы
Ответ 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;
});