Это решение проблемы, как описано в комментариях (хотя не фактический вопрос). Я думаю, что было бы намного быстрее использовать elementFromPoint
для проверки области, в которую вы хотите поместить элемент с фиксированным положением, и беспокоиться только об элементах в этой области. Пример здесь:
http://jsfiddle.net/pQgwE/4/
По сути, просто установите минимально возможный размер элемента, который вы ищете, и отсканируйте всю область, которую хочет занять ваш новый элемент с фиксированной позицией. Создайте список уникальных элементов, найденных там, и вам нужно только проверить стиль этих элементов.
Обратите внимание, что этот метод предполагает, что элемент, который вы ищете, имеет самый высокий z-индекс (что кажется разумным предположением для фиксированной позиции). Если этого недостаточно, то его можно настроить, чтобы скрыть (или назначить минимальный z-индекс) каждому элементу после того, как он был обнаружен, и снова проверить точку, пока ничего больше не будет найдено (чтобы убедиться), а затем восстановить их потом. Это должно произойти так быстро, чтобы быть незаметным.
HTML:
<div style="position:fixed; left: 10px; top: 10px; background-color: #000000;
color: #FF0000;">I Am Fixed</div>
<div id="floater">OccupyJSFiddle!<br>for two lines</div>
JS:
var w = $(window).width(), h=$(window).height(),
minWidth=10,
minHeight=10, x,y;
var newFloat = $('#floater'),
maxHeight = newFloat.height(),
el,
uniqueEls=[],
i;
for (x=0;x<w;x+=minWidth) {
for (y=0;y<h&& y<maxHeight;y+=minHeight) {
el = document.elementFromPoint(x,y);
if (el && $.inArray(el,uniqueEls)<0) {
uniqueEls.push(el);
}
}
}
// just for the fiddle so you can see the position of the elements
// before anything's done
// alert("click OK to move the floater into position.");
for (i=0;i<uniqueEls.length;i++) {
el = $(uniqueEls[i]);
if (el.css("position")==="fixed") {
el.css("top",maxHeight+1);
}
}
newFloat.css({'position': 'fixed',
'top': 0,
'left': 0});