2016-06-24 2 views
0

У меня есть прозрачные div, которые могут потенциально перекрываться. Они могут быть расположены в «порядке z» либо с помощью явного CSS z-order, либо по умолчанию для DOM-заказа. В соответствии со спецификацией стиля существует множество комбинаций DOM-упорядочения, z-index и display, которые влияют на итоговое эффективное положение z элемента.найти divs в слоях (z-index) над другим div

Как я могу найти все элементы, которые находятся выше (или ниже) данного ссылочного объекта, не полагаясь на простой явный z-индекс, но в соответствии с более общими правилами стилизации?

В центре моего вопроса находится только на z-порядок. Под «find» я имею в виду, имея (javascript/jquery) алгоритм для выбора или повторения элементов выше/ниже.

примечания: Глядя на документацию, я думаю

https://www.smashingmagazine.com/2009/09/the-z-index-css-property-a-comprehensive-look/

немного лучше, чем читать

https://philipwalton.com/articles/what-no-one-told-you-about-z-index/

Было бы лучше, если бы можно было бы запросить «рендеринг движок "так или иначе - ведь клик в заданной xy-позиции напрямую вызывает верхний элемент (в этом месте) - так что информация уже есть где-то ...!?

+1

Опишите "найти все элементы"? Как вы их найдете - инструменты JS/developer? Он слишком широк, чтобы ответить –

+0

Можете ли вы привести примерный код, возможно, некоторые HTML, CSS и JS, чтобы сделать вещи более понятными? – adamk22

+0

Петля через все видимые элементы страницы. Все элементы перед током с более низким или равным индексом z перед, остальное после ... –

ответ

0

вот как вы находите все перекрывающиеся элементы, но я не уверен, как их упорядочить по z-index. как вы сказали, существует множество вариантов, влияющих на порядок z-index. Для этого вам понадобится огромный код. не уверены в производительности, так как вам потребуется цикл всего элемента несколько раз.

$("div").on("click", function() { 
      var div = $(this); 
      $('body').find('*').each(function() { 
       if($(this).width() > 0 && $(this).height() > 0) { 
        if((($(this).offset().left <= div.offset().left && $(this).offset().left+$(this).width() >= div.offset().left) 
         || ($(this).offset().left < div.offset().left+div.width() && $(this).offset().left > div.offset().left)) 
         && (($(this).offset().top <= div.offset().top && $(this).offset().top+$(this).height() >= div.offset().top) 
         || ($(this).offset().top < div.offset().top+div.height() && $(this).offset().top > div.offset().top) 
         )) { 
         console.log($(this)); 
        } 
       } 
      }); 
      return false; 
     }); 
+0

изменить return false для возврата true, если вы не хотите блокировать другие события подкласса –

+0

Спасибо - для xy это дает мне необходимые идеи. Вы действительно думаете, что для 'z ordering' необходимо несколько посещений элементов. Из моего отредактированного вопроса: «Было бы лучше, если бы можно было каким-то образом спросить« механизм рендеринга »- ведь щелчок по заданной xy-позиции напрямую вызывает верхний элемент (в этом месте) - так что информация уже присутствует где-то ...?? " – sebhaase

Смежные вопросы