2010-06-10 12 views
15

En javascript, dans le gestionnaire d'événements javascript pour onMouseMove comment puis-je obtenir la position de la souris dans x, y corrdates par rapport au haut de la page?onMouseMove obtenir la position de la souris

+0

double possible de [Comment obtenir la position de la souris dans jQuery sans souris -events?] (http://stackoverflow.com/questions/4517198/how-to-get-mouse-position-in-jquery-without-mouse-events) – Lucio

Répondre

24

si vous pouvez utiliser jQuery, puis this aiderai:

<div id="divA" style="width:100px;height:100px;clear:both;"></div> 
<span></span><span></span> 
<script> 
    $("#divA").mousemove(function(e){ 
     var pageCoords = "(" + e.pageX + ", " + e.pageY + ")"; 
     var clientCoords = "(" + e.clientX + ", " + e.clientY + ")"; 
     $("span:first").text("(e.pageX, e.pageY) - " + pageCoords); 
     $("span:last").text("(e.clientX, e.clientY) - " + clientCoords); 
    }); 

</script> 

ici est pur javascript seul exemple:

var tempX = 0; 
    var tempY = 0; 

    function getMouseXY(e) { 
    if (IE) { // grab the x-y pos.s if browser is IE 
     tempX = event.clientX + document.body.scrollLeft; 
     tempY = event.clientY + document.body.scrollTop; 
    } 
    else { // grab the x-y pos.s if browser is NS 
     tempX = e.pageX; 
     tempY = e.pageY; 
    } 

    if (tempX < 0){tempX = 0;} 
    if (tempY < 0){tempY = 0;} 

    document.Show.MouseX.value = tempX;//MouseX is textbox 
    document.Show.MouseY.value = tempY;//MouseY is textbox 

    return true; 
    } 
+0

hmm, js exemple ressemble beaucoup à http: // www.codelifter.com/main/javascript/capturemouseposition1.html sauf sans les commentaires pratiques – RozzA

+1

'id =" # divA "' et '$ (" divA ")' - quelqu'un était endormi en écrivant ceci – RozzA

+0

@RozzA merci de faire attention. – TheVillageIdiot

4

Surtout avec les événements mousemove, que le feu rapide et furieux, il est bon de réduire les manipulateurs avant de les utiliser -

var whereAt= (function(){ 
    if(window.pageXOffset!= undefined){ 
     return function(ev){ 
      return [ev.clientX+window.pageXOffset, 
      ev.clientY+window.pageYOffset]; 
     } 
    } 
    else return function(){ 
     var ev= window.event, 
     d= document.documentElement, b= document.body; 
     return [ev.clientX+d.scrollLeft+ b.scrollLeft, 
     ev.clientY+d.scrollTop+ b.scrollTop]; 
    } 
})() 

document.ondblclick = fonction (e) {alert (whereAt (e))};

5

Il peut être un peu exagéré d'utiliser d3.js juste pour trouver les coordonnées de la souris, mais ils ont une fonction très utile appelée d3.mouse(*container*). Ci-dessous un exemple de faire ce que vous voulez faire:

var coordinates = [0,0]; 
d3.select('html') // Selects the 'html' element 
    .on('mousemove', function() 
    { 
     coordinates = d3.mouse(this); // Gets the mouse coordinates with respect to 
            // the top of the page (because I selected 
            // 'html') 
    }); 

Dans le cas ci-dessus, la coordonnée x serait coordinates[0], et la coordonnée y serait coordinates[1]. Cela est extrêmement pratique, car vous pouvez obtenir les coordonnées de la souris par rapport à n'importe quel conteneur en échangeant 'html' avec l'étiquette (par exemple 'body'), le nom de classe (par exemple '.class_name') ou id (par exemple '#element_id').

+0

+1, mais ** Avertissement juste **: Cette approche est un peu trop lent pour une utilisation contre 'onmousemove'. J'avais déjà d3.js dans mon projet, donc je l'ai essayé, mais ce n'est pas assez rapide pour mon cas d'utilisation. – elrobis

3

C'est essayé et fonctionne dans tous les navigateurs:

function getMousePos(e) { 
     return {x:e.clientX,y:e.clientY}; 
    } 

Maintenant, vous pouvez l'utiliser dans un événement comme celui-ci:

document.onmousemove=function(e) { 
     var mousecoords = getMousePos(e); 
     alert(mousecoords.x);alert(mousecoords.y); 
    }; 
Questions connexes