elementFromPoint возвращает ноль при использовании в событии onscroll - PullRequest
5 голосов
/ 22 ноября 2011

У меня есть простая html-страница с основным div с фиксированной высотой (с возможностью прокрутки) и 2 маленьких div в этом div.Я пытаюсь получить текущий элемент в средней точке мастер Div во время прокрутки.Он хорошо работает во всех браузерах, кроме IE8.В IE8 document.elementFromPoint () возвращает значение null в событии onscroll для всех возможных значений в качестве координат.Кто-нибудь знает обходной путь или решение этой проблемы?

Вот 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 };
    }

1 Ответ

3 голосов
/ 11 января 2012

Хотя, возможно, это не самое элегантное из решений, я закончил проверкой, получил ли я что-то от elementFromPoint и, если нет, использовал setTimeout (fn, 0), чтобы повторить вызов функции в следующем цикле свободного времени. В IE9 и других браузерах это работает с первого раза; для IE8 он устанавливает время ожидания и срабатывает после обработки события прокрутки, что дает элемент.

...