Как рассчитать положение элементов в прокручиваемом элементе div? - PullRequest
2 голосов
/ 06 августа 2009

У меня есть div с абсолютным позиционированием, установленным для вертикальной прокрутки. Мое приложение включает средства перетаскивания, которые полагаются на то, что я определяю координаты элементов при возникновении событий.

Смещения, которые я использую для вычисления позиций элементов (то есть element.offsetLeft & element.offsetTop), относятся только к исходной позиции элемента и не учитывают изменения положения, вызванные прокруткой пользователя. Я подумал, что мог бы добавить поправку, если бы мог рассчитать прокручиваемое расстояние, но я не вижу никакого способа сделать это (в отличие от прокрутки окна).

Буду очень признателен за любые предложения.

Ответы [ 3 ]

3 голосов
/ 06 августа 2009

Посмотрите на свойства scrollTop и scrollLeft контейнера div.

1 голос
/ 30 января 2012

Вот кросс-браузерное решение, которое находит позицию элемента с учетом прокрутки div / s и прокрутки окна:

var isIE = navigator.appName.indexOf('Microsoft Internet Explorer') != -1;

function findElementPosition(_el){
    var curleft = 0;
    var curtop = 0;
    var curtopscroll = 0;
    var curleftscroll = 0;

    if (_el.offsetParent){
        curleft = _el.offsetLeft;
        curtop = _el.offsetTop;

        /* get element scroll position */
        var elScroll = _el;
        while (elScroll = elScroll.parentNode) {
            curtopscroll = elScroll.scrollTop ? elScroll.scrollTop : 0;
            curleftscroll = elScroll.scrollLeft ? elScroll.scrollLeft : 0;

            curleft -= curleftscroll;
            curtop -= curtopscroll;
        }

        /* get element offset postion */
        while (_el = _el.offsetParent) {
            curleft += _el.offsetLeft;
            curtop += _el.offsetTop;
        }
    }

    /* get window scroll position */
    var offsetX = isIE ? document.body.scrollLeft : window.pageXOffset;
    var offsetY = isIE ? document.body.scrollTop : window.pageYOffset;

    return [curtop + offsetY,curleft + offsetX];
}
0 голосов
/ 06 августа 2009

Это то, что я внедряю как исправление на случай, если кому-то будет интересно.

Спасибо, ребята.

/*
    Find a html element's position.
    Adapted from Peter-Paul Koch of QuirksMode at   http://www.quirksmode.org/js/findpos.html
*/
function findPos(obj)
{
    var curleft = 0;
    var curtop = 0;
    var curxscroll = 0;
    var curyscroll =0;

    while(obj && obj.offsetParent)
    {
        curyscroll = obj.offsetParent.scrollTop || 0;
        curxscroll = obj.offsetParent.scrollLeft || 0;
        curleft += obj.offsetLeft - curxscroll;
        curtop += obj.offsetTop - curyscroll;
        obj = obj.offsetParent;
    }

    return [curleft,curtop];
}
...