Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Получение позиции текста по координатам (https://javascript.ru/forum/events/14872-poluchenie-pozicii-teksta-po-koordinatam.html)

Маэстро 08.02.2011 14:19

Цитата:

Сообщение от traa (Сообщение 91251)
возможно ли определить, какие элементы попадают в область, обозначенную четырьмя координатами экрана?

Можно пойти от обратного:
-обращаетесь к коллекции DOM-элементов всего своего BODY (можно для уменьшения количества просматриваемых элементов выбрать только элементы класса DIV).
-перебирая последовательно все эти элементы определяете их абсолютные координаты с помощью getOffset()
-сравниваете полученные абсолютные координаты всех этих элементов с координатами Вашего заданного прямоугольника и определяете попадание одних в другие.
-таким образом Вы получите список необходимых элементов; дальше необходимо решить нужны ли Вам элементы, которые "накрывают" заданный прямоугольник, либо нужны только элементы, которые полностью умещаются в заданном прямоугольнике.
function getOffsetRect(elem)
{
    var box = elem.getBoundingClientRect()

    var body = document.body
    var docElem = document.documentElement

    var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop
    var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft
    var clientTop = docElem.clientTop || body.clientTop || 0
    var clientLeft = docElem.clientLeft || body.clientLeft || 0
    var top  = box.top +  scrollTop - clientTop
    var left = box.left + scrollLeft - clientLeft

    return { top: Math.round(top), left: Math.round(left) }
}


function getOffsetSum(elem)
{
var top=0, left=0;

while(elem)
 {
 top = top + parseInt(elem.offsetTop);
 left = left + parseInt(elem.offsetLeft);
 elem = elem.offsetParent;
 }

return {top: top, left: left}
}


function getOffset(elem)
{
if (elem.getBoundingClientRect)
return getOffsetRect(elem);
else return getOffsetSum(elem);
}

to dmitriymar:
непонятка со скроллером возникла между вами из-за того, что Вы думаете о заданных координатах, как о координатах мыши - в этом случае нужно учитывать скроллеры, а traa говорит об "абсолютно-абсолютных" координатах страницы (а не экрана), например, 3000х5000 px.


Часовой пояс GMT +3, время: 20:49.