Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 08.02.2011, 14:19
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от 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.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
(DOM) JQuery получение текста ссылки Mila Общие вопросы Javascript 5 25.04.2012 13:36
получение выделенного текста ASerputko Общие вопросы Javascript 2 13.01.2011 09:57
получение текста через тег <script> micscr Общие вопросы Javascript 2 05.06.2010 15:19
Получение текста ссылки Dimanoid Я не знаю javascript 3 07.06.2009 00:58
Firefox: перехватить соббытие при перетаскивании текста no_alex Общие вопросы Javascript 9 21.08.2008 18:02