Сообщение от traa
|
возможно ли определить, какие элементы попадают в область, обозначенную четырьмя координатами экрана?
|
Можно пойти от обратного:
-обращаетесь к коллекции 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.