document.elementFromPoint在IE上返回null

时间:2010-12-01 06:21:12

标签: javascript internet-explorer dom

我正在使用document.elementFromPoint来获取所选元素以进行拖动。但它返回null。当我调试相同然后重新运行相同的代码时,返回对象。

以下是代码:

function GetZoneFromPoint(x, y, prtDrag, elemIBeam,evnt) {
    if (x == null || y == null || prtDrag == null || elemIBeam == null)
        alert("Null in GetZone");
    var prtDragZIndexOld = prtDrag.style.zIndex;
    var elemIBeamZIndexOld = elemIBeam.style.zIndex;
    prtDrag.style.zIndex = -1;
    elemIBeam.style.zIndex = -1;
    var zone;
    zone = document.elementFromPoint(x, y);
    prtDrag.style.zIndex = prtDragZIndexOld;
    elemIBeam.style.zIndex = elemIBeamZIndexOld;
    if (zone == null) {
        zone = document.elementFromPoint(x, y);
        if (zone == null) {
            debugger;
            zone = event.rangeParent;
        }
    }
    if (zone == null) {
        alert('null');
        return null;
    }
    if (x < 0 || x > document.body.clientWidth ||
      y < 0 || y > document.body.clientHeight) {
        zone = null;
    }
    else if ((zone.className == 'LayoutWellElement') ||
           (zone.className == 'LayoutMainElement') ||
           (zone.className == 'ElementFrame')) {
        while ((!FIsZone(zone)) && (zone.tagName != 'BODY')) {
            zone = zone.parentElement;
        }
    }
    if (!FIsZone(zone)) {
        zone = null;
    }
    return zone;
}

1 个答案:

答案 0 :(得分:0)

看起来我们有同样令人讨厌的想法,哈哈。但我正在研究物体碰撞。看,你在哪里调用GetZoneFromPoint。仅在浏览器中调用光标点击事件,对吧?所以,不需要先检查x或y,只需检查zone = null。你仔细检查elementFromPoint是什么时候x&amp;不变?我在这里完成了工作。

一些提示: - 我有2个'绝对'DIV对象叫做A&amp; B在右下角与B重叠。 - 使用这样:     var X = parseInt(B.offsetLeft);     var Y = parseInt(B.offsetTop);     警报(document.elementFromPoint(X,Y).innerHTML); - 为什么解析? offsetLeft以格式返回:number +“px” - 结果是:IE->返回A而FF-> B - 如果X-1或Y-1,两个浏览器都返回A. - 最后的话:不要单独使用document.body.clientWidth检查解析,试试这个document.body.clientWidth-o.clientWidth。希望这些能给你一个加强奖励。振作!