2011-11-02 59 views
3

我需要每隔n秒記錄鼠標位置,但jQuery似乎只提供了在出現鼠標事件時檢索x和y位置值的方法。這可以通過setInterval()完成嗎?我想設置一個setInterval()每n秒增加一個值(比如'i'),然後在mousemove上記錄下當前的i和x和y值。真的應該有一個比這更簡單的方法,雖然如何在setInterval()回調中獲取光標位置

回答

2

你可以做的是一個功能綁定到文檔上的鼠標移動事件,在函數內部用鼠標位置的全局變量。那麼每隔一段時間你就可以讀取鼠標的位置。

例如:

$(document).ready(function() { 
    var mousePosition = {'x': 0, 'y': 0}; 
    $(document).bind('mousemove', function(e) { 
     mousePosition = {'x': e.pageX, 'y': e.pageY}; 
    }); 

    setInterval(function() { 
     // do something with mousePosition 
    }, 1000); 
}); 
1

這應該有所幫助。

http://jsbin.com/owifu3/

http://docs.jquery.com/Tutorials:Mouse_Position

還不如將代碼粘貼...

<html> 
<head> 
<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript"> 
jQuery(document).ready(function(){ 
    $(document).mousemove(function(e){ 
     $('#status').html(e.pageX +', '+ e.pageY); 
    }); 
}) 
</script> 
<body> 
<h2 id="status"> 
0, 0 
</h2> 
</body> 
</html> 
+0

這是一個良好的網頁,但每個例子依賴於鼠標事件(無論是鼠標移動()或點擊())。我想知道是否可以在計時器事件而不是鼠標事件上完成 –

0

我不得不做這樣的事情,有一次,我用這種哈克解決方案:

document.onmousemove=function(){ 
x = e.pageX; 
y = e.pageY; 
} 
setInterval(function(){ 
array.push(x+','+y); 
},'1000'); 

這個數組的長度將是你我。您可以使用split方法獲取單個術語。

Demo that just prints them to a div

0

你可以使.timeStamp財產是在event object可用的用法:

var stored = 0; 

$(document).mousemove(function(event) { 
    if(event.timeStamp - stored >= 2000) { 
     console.log('stored!'); 
     stored = event.timeStamp; 
    } 
}); 

當然,該技術將只存儲數據,同時移動鼠標。閒暇時,沒有任何反應。如果你還需要空閒位置,你真的需要一個間隔計時器。

0
jQuery(document).ready(function(){ 
    var myx, myy; 
    $(document).mousemove(function(e){ 
     myx = e.pageX; 
     myy = e.pageY); 
    }); 
    window.setInterval(function() { 
     $('#status').html('mouse position is '+myx+','+myy); 
     }, 1000); 
    });