Подтвердить что ты не робот

Видимость: скрытый vs display: none vs opacity: 0

Сейчас я начинаю анимационный проект. В проекте у меня будет более 40000 div и оживить их итеративно. Если какой-либо из div находится в пассивном состоянии (т.е. Он не оживляет хотя бы на 2 секунды), я не буду отображать их, чтобы увеличить производительность анимации.

Вопрос в том, какое свойство css является наиболее подходящим для этого?

.passive1{
   display:none
}

.passive2{
    visibility:hidden;
}

.passive3{
    opacity:0;
}

И как я могу измерить производительность рендеринга, например, fps, использование gpu?

4b9b3361

Ответ 1

Найденный ответ здесь ответит на ваш первый вопрос (скорее всего, display:none, поскольку пространство полностью разрушено).

К вашему второму вопросу инструменты, такие как это, вероятно, будут вам полезны. Однако 40 000 звуков divs например, слишком много, и вы, вероятно, будете иметь лучшую производительность с использованием canvas или SVG (например, используя библиотеку KineticJS, поскольку это обрабатывает анимацию - преобразование, поворот, масштаб и т.д.) для вас.

Ответ 2

Все они отображают элемент невидимым, но отличаются тем, занимает ли он пространство и потребляет клики

+--------------------+----------------+-----------------+
| Property           | occupies space | consumes clicks |
+--------------------+----------------+-----------------+
| opacity: 0         |        ✓       |        ✓        |
+--------------------+----------------+-----------------+
| visibility: hidden |        ✓       |        ✗        |
+--------------------+----------------+-----------------+
| display: none      |        ✗       |        ✗        |
+--------------------+----------------+-----------------+

✓: yes
✗: no

И когда мы говорим, что он потребляет щелчок, это означает, что он также потребляет другие события указателя, такие как ondblclick, onmousedown, onmousemove и т.д.

По существу "видимость: нет" ведет себя как комбинация "непрозрачность: 0" и "указатель-события: нет".

Ответ 3

display:none, потому что divs выводятся из потока тогда, поэтому их положение не нужно вычислять.

Таким образом, 40000 divs звучат безумно. Вы рассматривали альтернативы, такие как холст HTML5 или SVG?

Ответ 4

Дисплей: ни один не будет скрывать весь элемент и удалять его из пространства макета, тогда как видимость: скрытый скрывает элемент, но занимает то же место, что и раньше.
Непрозрачность может использоваться, если вы хотите создать прозрачность или эффект затухания.

Ответ 5

Perfomamce будет проблемой, если отображение: нет или видимость: скрытый используется, поскольку они запускают краску и макет в большинстве браузеров, что означает, что ваш браузер будет перерисовывать область просмотра каждый раз, когда эти два изменения, поэтому я рекомендую непрозрачность, но все же для этого числа divs будет по-прежнему неэффективным, как и ожидалось, вы можете попробовать webgl, используя библиотеку html-gl, которая отображает ваши divs в webgl check https://github.com/PixelsCommander/HTML-GL

Ответ 6

display:none: не занимает места, здесь нет элементов.

opacity:0: занимает пространство, вы его не видите, но можете щелкнуть по элементам за ним.

visibility:hidden: занимает пространство, и вы не можете щелкнуть элемент позади него.