2011-11-22 12 views
5

Tengo una página html simple con un div maestro con altura fija (desplazable) y 2 pequeños divs en este div. Estoy tratando de obtener el elemento actual en el punto medio de div principal durante el desplazamiento. Funciona bien en todos los navegadores excepto IE8. En IE8, document.elementFromPoint() devuelve nulo en el evento onscroll para todos los valores posibles como coordenadas. ¿Alguien sabe una solución o solución para este problema?elementoFromPoint devuelve nulo cuando se usa en el evento onscroll

Aquí es código HTML:

<div id="mainDiv" style="height:300px;min-height:300px;overflow:auto;" onscroll="mouseScrolled();"> 
     <div id="div1" style="height:500px;min-height:500px;background-color:blue;display:block;"> 

    </div> 
     <div id="div2" style="height:500px;min-height:500px;background-color:red;display:block;"> 

     </div> 
    </div> 

    <span id="debugSpan"> 
    </span> 

javascript:

function mouseScrolled(event) { 

     var mainDiv = document.getElementById('mainDiv'); 
     var x = getXY(mainDiv)[0] + mainDiv.offsetWidth/2; 
     var y = getXY(mainDiv)[1] + mainDiv.offsetHeight/2; 
     var ctr = document.elementFromPoint(x , y); 

     document.getElementById('debugSpan').innerHTML = "ClientX=" + x + "<BR>" + "ClientY=" + y +"<BR> Control:" + ctrId; 

    } 

    function getXY(obj) { 
     var curleft = curtop = 0; 
     if (obj.offsetParent) { 
      do { 
       curleft += obj.offsetLeft 
       curtop += obj.offsetTop 
      } 
      while (obj = obj.offsetParent) 
     } 
     return { x: curleft, y: curtop }; 
    } 

Respuesta

3

Aunque quizás no sea el más elegante de soluciones, terminé de comprobar si he recibido algo de elementFromPoint y si no, utilizar un setTimeout (fn, 0) para reintentar la llamada de función en el siguiente ciclo de reloj libre. En IE9 y otros navegadores, parece funcionar la primera vez; para IE8, establece el tiempo de espera y se activa después de que se realiza el procesamiento del evento de desplazamiento, lo que da un elemento.

+0

es como magia ... ya he decidido usar otra forma de calcularlo, pero de esta manera será mucho más útil. Gracias. –

Cuestiones relacionadas