2012-06-28 30 views
5

Estoy desarrollando una página web donde he configurado una imagen en un <div> dinámicamente. Funciona en Firefox pero falla en IE.¿Cómo obtener la posición del puntero del mouse con javascript para Internet Explorer?

La pregunta es: ¿cómo obtener la posición del puntero del mouse en IE? estoy usando el siguiente código para conseguir la posición de puntero del ratón

function getCursorXY(e) { 
    CurX = (window.Event) ? e.pageX : event.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft); 
    CurY = (window.Event) ? e.pageY : event.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop); 
} 

Funciona bien con Firefox.

+4

Esto tiene *** *** nada que ver con Java. Quitaría la etiqueta 'java' por ti, pero hay una edición pendiente en el camino. –

+0

Pruebe esto http://expsharing.blogspot.in/2008/08/following-javascript-help-we-get.html – Imdad

Respuesta

0

Uso: clientX y clientY

Al igual que este código:

var posx = 0; 
var posy = 0; 
if (e.pageX || e.pageY)  { 
    posx = e.pageX; 
    posy = e.pageY; 
} 
else if (e.clientX || e.clientY) { 
    posx = e.clientX + document.body.scrollLeft 
     + document.documentElement.scrollLeft; 
    posy = e.clientY + document.body.scrollTop 
     + document.documentElement.scrollTop; 
} 
+0

Intenté esto pero no funcionó. –

+0

¿Recibes un error o algo? – roev

8

probar esto, Esto debería funcionar en todos los navegadores, incluyendo IE.

<html> 
<body> 
<form name="Show"> 
<input type="text" name="MouseX" value="0" size="4"> X<br> 
<input type="text" name="MouseY" value="0" size="4"> Y<br> 
</form> 

<script language="JavaScript1.2"> 
<!-- 

// Detect if the browser is IE or not. 
// If it is not IE, we assume that the browser is NS. 
var IE = document.all?true:false 

// If NS -- that is, !IE -- then set up for mouse capture 
if (!IE) document.captureEvents(Event.MOUSEMOVE) 

// Set-up to use getMouseXY function onMouseMove 
document.onmousemove = getMouseXY; 

// Temporary variables to hold mouse x-y pos.s 
var tempX = 0 
var tempY = 0 

// Main function to retrieve mouse x-y pos.s 

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 
    } 
    // catch possible negative values in NS4 
    if (tempX < 0){tempX = 0} 
    if (tempY < 0){tempY = 0} 
    // show the position values in the form named Show 
    // in the text fields named MouseX and MouseY 
    document.Show.MouseX.value = tempX 
    document.Show.MouseY.value = tempY 
    return true 
} 

//--> 
</script> 
</body> 
</html> 
+0

¿Por qué usar el operador ternario para detectar document.all? ¿por qué no utilizar !! document.all? –

4

He resuelto este problema con este código

var CurX; 
    var CurY; 
    var IE = document.all?true:false; 
    if(IE){ 
     CurX = window.event.clientX; 
     CurY = window.event.clientY; 
    } 
    else{ 
     if (window.captureEvents) { 
     document.captureEvents(Event.MOUSEMOVE); 
    } 
    document.onmousemove = getCursorXY; 
} 

function getCursorXY(e) { 
    CurX = (window.Event) ? e.pageX : event.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft); 
    CurY = (window.Event) ? e.pageY : event.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop); 
} 
+0

¿Por qué no cambias el IE var para no ver como la sentencia if (IE) se ejecutará en todo, EXCEPTO en IE. –

Cuestiones relacionadas