所以,就像問題指定的那樣,是否有辦法在jQuery中觸發mousemove事件,並將鼠標座標發送到事件Object?有沒有辦法觸發mousemove並獲取event.pageX,event.pageY?
到目前爲止,我的代碼可以使用.trigger(event)函數觸發mousemove,但event.pageX和event.pageY未定義。
所以,就像問題指定的那樣,是否有辦法在jQuery中觸發mousemove事件,並將鼠標座標發送到事件Object?有沒有辦法觸發mousemove並獲取event.pageX,event.pageY?
到目前爲止,我的代碼可以使用.trigger(event)函數觸發mousemove,但event.pageX和event.pageY未定義。
我不相信通過JavaScript/jQuery按需獲得鼠標座標;但是如果你的位置綁定到一個全局變量,你就可以隨時訪問它們在整個文件是這樣的:
$(document).ready(function(){
$().mousemove(function(e){
window.xPos = e.pageX;
window.yPos = e.pageY;
});
});
一少的CPU密集型選項,你可以添加一個暫停,但你有輕微的貿易業績在明知延遲鼠標的位置:
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使用這兩種解決方案在文件中,而無需觸發事件人造。
-1這沒有解決涉及手動觸發事件的問題。 – zzzzBov
我知道如何通過在對象上綁定mousemove來獲得鼠標的座標。但是,說鼠標不動,但我想在jQuery中使用觸發器功能來觸發虛擬鼠標移動並仍然獲得座標。 –
@ geossj5 - 如果您已經在跟蹤鼠標,並且鼠標不再移動,那麼無論最後一次記錄的座標是什麼樣子,情況依然如此......? –
我不確定我完全理解這個問題。你可以這樣做:
$('.someClass').mousemove(function(event){
console.log(event.pageX);
console.log(event.pageY);
});
現在,只要在someClass
鼠標移動時,將註冊XY cordinates。以下是jsfiddle以查看它的行動和jQuery documentation。
我知道如何通過在元素上綁定mousemove來獲取鼠標的座標。但是,說鼠標不動,但我想在jQuery中使用觸發器功能來觸發虛擬鼠標移動並仍然獲得座標。 –
你是怎樣用Javascript移動鼠標的? – Ryre
如果這是你要求的,你不能移動鼠標。但是你可以用你想要的任何上下文和參數來調用一個函數。例如:
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
想想我知道你的問題。您正在嘗試以編程方式查詢鼠標位置。也許你有這樣的代碼:
$(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中的一些錯誤。無論如何,只是不要鏈接該電話觸發和而不是觸發$(窗口)上的事件。不要問我爲什麼它的工作原理雖然但對我來說做的:
$(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');
您需要直接觸發事件之前設置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);
這不起作用,因爲jQuery在調用觸發器時會忽略pageX和pageY參數。 –
什麼使你得出這個結論?看看[這個jsfiddle](http://jsfiddle.net/yPgnp/)。 – tenedor
我同意,這種方法對我來說是最好的,很容易自己定義事件,只是自己改變pageX/pageY的道具 – CatalinBerta
這是我能想到的最好的,這並沒有解決你設置全局變量。點擊事件仍然會捕獲座標,因此您可以將該事件傳遞給您的鼠標移動。
$(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;
});
這是測試嗎? – airportyh
一旦你可以做的事情是從最後一個真正的mousemove事件中保存事件數據,那麼如果沒有新的事件數據存在,那麼當你以編程方式觸發它時重用它。如果真正的鼠標移動事件沒有被觸發,這意味着鼠標沒有移動,所以最後一個真正的鼠標移動的eventData應該保持當前位置。 – Mahn