2011-11-22 15 views
5

में उपयोग किए जाने पर शून्य लौटाता है मेरे पास इस div में निश्चित ऊंचाई (स्क्रोल करने योग्य) और 2 छोटे divs के साथ एक मास्टर div के साथ एक साधारण HTML पृष्ठ है। मैं स्क्रॉल के दौरान मास्टर div के मध्य बिंदु में वर्तमान तत्व प्राप्त करने की कोशिश कर रहा हूं। यह आईई 8 को छोड़कर सभी ब्राउज़रों पर अच्छा काम करता है। IE8 में, document.elementFromPoint() निर्देशांक के रूप में सभी संभावित मानों के लिए ऑनस्क्रॉल ईवेंट में शून्य देता है। कोई भी इस समस्या के लिए एक समाधान या समाधान जानता है?elementFromPoint ऑनसक्रॉल ईवेंट

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

जावास्क्रिप्ट:

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)। आईई 9 और अन्य ब्राउज़रों में, यह पहली बार काम करता प्रतीत होता है; आईई 8 के लिए, स्क्रॉल इवेंट प्रोसेसिंग के बाद यह टाइमआउट और आग सेट करता है, जो एक तत्व देता है।

+0

यह जादू की तरह है .. मैंने पहले ही इसकी गणना करने के लिए किसी अन्य तरीके का उपयोग करने का निर्णय लिया है, लेकिन इस तरह यह अधिक उपयोगी होगा। धन्यवाद। –