2010-08-19 16 views
17

Ich versuche, die genaue Mausposition relativ zum Fenster zu bekommen.jquery Maus Position relatives Fenster

Hier ist mein Problem ...

  • document.height = 1600 (tatsächliche Dokumentgröße)
  • window.height = 400 (sichtbar)

Ich muss die Mausposition relativ herauszufinden das Fenster, nicht das Dokument, das das Attribut pageY enthält.

Es ist für einen großen Tooltip, der auf mouesover für einen Tischartikel abgerufen wird. Wenn am unteren Bildschirmrand nicht genug Platz ist (Fenster ist maximiert), wird der Tooltip über dem Zeiger angezeigt, andernfalls unter dem Zeiger. Dies funktioniert, bis die Dokumentgröße größer ist als die Seitengröße (lange Tabelle).

Danke, Luc

Antwort

34

Sie .scrollTop() des window von pageY subtrahieren kann die Position in dem Fenster, wie diese zu bekommen:

var top = e.pageY - $(window).scrollTop(); 

You can give it a try here, take a look at the console.

+0

Sie sind super. Das hat es geschafft! Danke!! – user425772

+1

@lucl - Willkommen :) Und willkommen bei SO! –

+0

Große Lösung und so einfach. OP sollte als Lösung markieren. –

0

Wie verhält es sich mit dem Attribut document.body.scrollTop, das die Pixel enthält, die Sie gescrollt haben. Ich glaube, ein einfacher pageY - scrollTop sollte dann genügen?

4

Und was ist mit window.pageYOffset?

Demo:

<html> 
<head> 
<style> 
    html,body {padding:0;margin:0} 
    #content {height:2048px;background-color:#ccc;} 
    #status {position:fixed;top:0;left:0;} 
</style> 
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
<script type="text/javascript"> 
jQuery(document).ready(function(){ 
    $(document).mousemove(function(e){ 
     $('#status').html(e.pageX +', '+ (e.pageY - window.pageYOffset)); 
    }); 
}) 
</script> 
<body> 
<h2 id="status">0, 0</h2> 
<div id="content"></div> 
</body> 
</html> 
0
function showCoords(evt){ 
    alert(
    "clientX value: " + evt.clientX + "\n" 
    + "clientY value: " + evt.clientY + "\n" 
); 
} 

Ich denke, das ist das, was Sie suchen. Siehe in Einzelheiten here from Mozilla Developer.