2010-06-10 23 views
15

En javascript, dentro del evento javascript para onMouseMove, ¿cómo obtengo la posición del mouse en x, y corrige en relación con la parte superior de la página?onMouseMove obtener la posición del mouse

+0

posible duplicado de [¿Cómo obtener la posición del ratón en jQuery y sin ratón -eventos?] (http://stackoverflow.com/questions/4517198/how-to-get-mouse-position-in-jquery-without-mouse-events) – Lucio

Respuesta

24

si se puede usar jQuery, entonces this le ayudará:

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

aquí es puro Javascript único ejemplo:

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, el ejemplo js parece muy similar a http: // www.codelifter.com/main/javascript/capturemouseposition1.html excepto sin los prácticos comentarios – RozzA

+1

'id =" # divA "' y '$ (" divA ")' - alguien estaba dormido al escribir este – RozzA

+0

@RozzA gracias por prestar atención. – TheVillageIdiot

4

Especialmente con eventos mousemove, que el fuego rápido y furioso, es bueno reduzca los manipuladores antes de usarlos-

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

5

Puede ser un poco exagerado usar d3.js solo para encontrar las coordenadas del mouse, pero tienen una función muy útil llamada d3.mouse(*container*). A continuación se muestra un ejemplo de hacer lo que quiere hacer:

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

En el caso anterior, la coordenada x sería coordinates[0], y la coordenada y sería coordinates[1]. Esto es extremadamente útil, porque puede obtener las coordenadas del mouse con respecto a cualquier contenedor que desee intercambiando 'html' con la etiqueta (por ejemplo, 'body'), nombre de clase (por ejemplo, '.class_name') o id (por ejemplo, '#element_id').

+0

+1, pero ** Advertencia razonable **: Este enfoque es un poco demasiado lento para su uso contra 'onmousemove'. Ya tenía d3.js en mi proyecto, así que lo probé, pero no es lo suficientemente fuerte para mi caso de uso. – elrobis

3

Esto está probado y funciona en todos los navegadores:

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

Ahora usted puede utilizarlo en un evento como este:

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