我有一个简单的html页面,其中包含一个固定高度(可滚动)的主div和此div中的2个小div。我想在滚动期间将当前元素放在master div的中间点。它适用于除IE8以外的所有浏览器。在IE8中,document.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 };
}
答案 0 :(得分:3)
虽然可能不是最优雅的解决方案,但我最终检查是否收到了来自elementFromPoint的内容,如果没有,请使用setTimeout(fn,0)在下一个空闲时钟周期重试函数调用。在IE9和其他浏览器中,它似乎第一次工作;对于IE8,它设置了滚动事件处理完成后的超时和触发,这给出了一个元素。