2011-11-22 55 views
5

我有一個簡單的html頁面,帶有固定高度(可滾動)的主div和此div中的2個小div。我試圖在滾動期間獲取主div中間點的當前元素。它適用於除IE8以外的所有瀏覽器。在IE8中,document.elementFromPoint()在onscroll事件中爲所有可能的值返回null作爲座標。任何人都知道這個問題的解決方法或解決方案?elementFromPoint當它在onscroll事件中使用時返回null

下面是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 }; 
    } 

回答

3

雖然也許不是最優雅的解決方案,我結束了,如果我從elementFromPoint,如果沒有收到什麼檢查,用setTimeout(fn,0)在下一個空閒時鐘週期重試該函數調用。在IE9和其他瀏覽器中,它似乎第一次工作;對於IE8,它設置超時並在滾動事件處理完成後觸發,這會產生一個元素。

+0

它就像魔術..我已經決定用另一種方式來計算它,但這樣它會更有用。謝謝。 –

相關問題