2010-06-10 16 views
15

W javascript, w javascript hander zdarzenia onMouseMove, jak mogę uzyskać pozycję myszy w x, y corrdinates w stosunku do górnej części strony?onMouseMove uzyskać pozycję myszy

+0

możliwe duplikat [Jak zdobyć pozycję myszy w jQuery bez myszy -events?] (http://stackoverflow.com/questions/4517198/how-to-get-mouse-position-in-jquery-without-mouse-events) – Lucio

Odpowiedz

24

jeśli można użyć jQuery, następnie this pomoże:

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

tutaj jest czysty javascript tylko przykład:

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, przykład js wydaje się bardzo podobny do http: // www.codelifter.com/main/javascript/capturemouseposition1.html oprócz bez użytecznych komentarzy – RozzA

+1

'id =" # divA "' i '$ (" divA ")' - ktoś spał, pisząc to – RozzA

+0

@RozzA dzięki za uwagę. – TheVillageIdiot

4

Zwłaszcza mouseMove wydarzeń, że pożar szybko i gwałtownie, jego dobry odsuń pilniki przed ich użyciem -

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

Może być trochę przesada, aby użyć d3.js tylko do znalezienia współrzędnych myszy, ale mają one bardzo przydatną funkcję o nazwie d3.mouse(*container*). Poniżej znajduje się przykład z tym, co chcesz zrobić:

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

W powyższym przypadku, współrzędna x byłoby coordinates[0], a współrzędna y będzie coordinates[1]. Jest to bardzo przydatne, ponieważ można uzyskać współrzędne myszy w odniesieniu do dowolnego kontenera, wymieniając ze znacznikiem (np. 'body'), nazwę klasy (na przykład '.class_name') lub identyfikator (np. '#element_id')

+0

+1, ale ** Fair Warning **: To podejście jest trochę zbyt powolne do użycia przeciwko 'onmousemove'. W moim projekcie miałem już d3.js, więc go wypróbowałem, ale nie jest wystarczająco sprytu dla mojego przypadku użycia. – elrobis

3

to wypróbowany i działa we wszystkich przeglądarkach:

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

Teraz można go używać w przypadku takiego:

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