document.elementFromPoint возвращает ноль в IE - PullRequest
2 голосов
/ 01 декабря 2010

Я использую document.elementFromPoint для получения выбранного элемента для его перетаскивания. Но это возвращает ноль. Когда я отлаживаю то же самое, а затем снова запускаю тот же код, объект возвращается.

Следующий код:

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 голосов
/ 09 декабря 2010

похоже, у нас такая же противная идея, хаха. Но я работаю над столкновением объектов. Посмотрите, где вы звоните GetZoneFromPoint. Событие щелчка курсора вызывается только в браузере, верно? Таким образом, нет необходимости проверять x или y, сначала только zone = null. Вы дважды проверяете elementFromPoint, для чего при неизменности x & y? Я закончил работу здесь.

несколько советов: - У меня есть 2 «абсолютных» объекта DIV, которые называются A & B, и B перекрывается с A в правом нижнем углу. - Используйте как это: var X = parseInt (B.offsetLeft); var Y = parseInt (B.offsetTop); оповещение (document.elementFromPoint (X, Y) .innerHTML); - зачем разбирать? offsetLeft возврат в формате: число + «px» - Результат: IE-> return A, а FF-> B - Если X-1 или Y-1, оба браузера возвращают A. - Заключительные слова: не используйте document.body.clientWidth в одиночку, проверьте разрешение, попробуйте этот document.body.clientWidth-o.clientWidth. Надеюсь, что это даст вам бонус на повышение. Не унывайте!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...