2010-06-10 11 views
15

In Javascript, innerhalb der Javascript Event-Handler für onMouseMove wie bekomme ich die Mausposition in x, y corrdinates relativ zum oberen Rand der Seite?onMouseMove bekommen Mausposition

+0

möglich Duplikat von [Wie in jQuery Mausposition zu erhalten, ohne Maus:

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

Jetzt ist es in einem Fall wie diesem die Sie verwenden können -events?] (http://stackoverflow.com/questions/4517198/how-to-get-mouse-position-in-jquery-without-mouse-events) – Lucio

Antwort

24

wenn Sie jQuery verwenden können, dann wird this helfen:

<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> 

hier ist reine Javascript einziges Beispiel:

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 Beispiel scheint sehr ähnlich zu http: // www.codelifter.com/main/javascript/capturemoseposition1.html außer ohne die praktischen Kommentare – RozzA

+1

'id =" # divA "' und '$ (" divA ")' - jemand hat geschlafen, als er dies geschrieben hat – RozzA

+0

@RozzA danke für die Aufmerksamkeit. – TheVillageIdiot

4

Gerade bei mousemove- Ereignissen, das Feuer schnell und wütend, seine gut zerlegen Sie die Handler, bevor Sie sie verwenden -

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 = Funktion (e) {Alarm (whereAt (e))};

5

Es könnte ein bisschen übertrieben sein, d3.js nur zum Auffinden von Mauskoordinaten zu verwenden, aber sie haben eine sehr nützliche Funktion namens d3.mouse(*container*). Im Folgenden ist ein Beispiel für das, was Sie tun möchten:

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') 
    }); 

Im obigen Fall würde die x-Koordinate sein coordinates[0], und die y-Koordinate coordinates[1] wäre. Dies ist äußerst praktisch, da Sie die Mauskoordinaten in Bezug auf einen beliebigen Container abrufen können, indem Sie 'html' mit dem Tag (z. B. 'body'), Klassenname (z. B. '.class_name') oder ID (z. B. '#element_id') austauschen.

+0

+1, aber ** Fair Warning **: Dieser Ansatz ist ein wenig zu träge für den Einsatz gegen 'onmousemove'. Ich hatte bereits d3.js in meinem Projekt, also habe ich es ausprobiert, aber es ist einfach nicht genug für meinen Anwendungsfall. – elrobis

3

Dies ist erprobt und funktioniert in allen Browsern:

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