2011-11-22 16 views
5

Tôi có một trang html đơn giản với một div chủ với chiều cao cố định (có thể cuộn) và 2 div nhỏ trong div này. Tôi đang cố gắng lấy phần tử hiện tại ở điểm giữa của div chủ trong khi cuộn. Nó hoạt động tốt trên tất cả các trình duyệt ngoại trừ IE8. Trong IE8, document.elementFromPoint() trả về null trong sự kiện onscroll cho tất cả các giá trị có thể làm tọa độ. Bất cứ ai biết một workaround hoặc giải pháp cho vấn đề này?elementFromPoint trả về null khi nó được sử dụng trong sự kiện trên cuộn

Đây là HTML code:

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

Trả lời

3

Trong khi có lẽ không phải là thanh lịch nhất của các giải pháp, tôi đã kết thúc kiểm tra, nếu tôi nhận được một cái gì đó từ elementFromPoint và nếu không, sử dụng một setTimeout (fn, 0) để thử lại cuộc gọi hàm tại chu kỳ đồng hồ miễn phí tiếp theo. Trong IE9 và các trình duyệt khác, nó dường như làm việc lần đầu tiên; cho IE8, nó đặt thời gian chờ và cháy sau khi quá trình xử lý sự kiện cuộn được thực hiện, cho phép một phần tử.

+0

nó giống như ma thuật .. tôi đã quyết định sử dụng một cách khác để tính toán nhưng cách này sẽ hữu ích hơn nhiều. Cảm ơn bạn. –

Các vấn đề liên quan