На самом деле, если вы хотите получить супер плавный эффект, вы должны играть с transform
(rotate
, scale
, translate
, matrix
, skew
...), только со свойствами непрозрачности.Вам следует избегать анимации высоты и поля, как это возможно.Потому что эти свойства вызывают перекрашивание и / или перекомпоновку на странице .Вот еще одна хорошая ссылка, которая дает более подробную информацию о , какие свойства вы должны использовать , чтобы получить анимацию 60fps.
Мы собираемся сразу перейти к преследованию.Современные браузеры могут очень дешево анимировать четыре вещи: положение, масштаб, вращение и непрозрачность.Если вы анимируете что-то еще, это на свой страх и риск, и есть вероятность, что вы не получите гладкие и гладкие 60 кадров в секунду.
Также вам следует избегать использования JS или jQuery для анимации или выбора элементов.когда CSS может сделать работу правильно.Здесь ваш эффект может быть достигнут только при использовании псевдокласса :hover
.На самом деле Apple (на странице, которую вы дали) создает анимацию только с помощью CSS -> :hover
.jQuery, может вызвать глубокий анализ глубины в DOM и вставить некоторые ненужные элементы в желаемую анимацию 60fps.в своем коде вы добавили много js для того, чтобы воспроизвести поведение, которого css может достичь в одиночку очень-очень быстрым способом.Обычный способ сделать это: если родительский элемент находится, наведите курсор на все классы, которые покрывают его дочерние элементы в вашей таблице стилей CSS (не Js) .
Это простой пример:
.parent-el {
position: relative;
cursor: pointer;
}
.child-el-1 {
transform: translate3D(0,0,0);
transition: transform .4s ease;
}
.child-el-2 {
transform:rotate(0);
transition: transform .4s ease;
}
.parent-el:hover .child-el-1 {
transform: translate3D(100px,0,0);
}
.parent-el:hover .child-el-2 {
transform: rotate(45deg);
}
В вашем случае это может быть:
.item { box-shadow: 0 0 0 0 rgba(0,0,0,0.0); ...} // A better approach way to achieve it, is to use :after/:before pseudo element that contains box-shadow that you will animate with opacity property (0-1).
.item:hover { box-shadow: 0 0 30px 0 rgba(0,0,0,0.15); ... }
.container { opacity: 0; ...}
.item:hover .container { opacity: 1; ...}
.item img, .item video{ opacity: 1; ...}
.item:hover img, .item:hover video{ opacity: .5; ...}
...
И не забудьте установить свойство transition
для каждого (Кроме того, селектор *
может оказаться сложным в будущем для вашего кода).
Чтобы закончить, вы можете попробовать добавить свойство will-change
, которое может помочьулучшение производительности в анимации (необходимо использовать при модерации).
Есть много вещей, которые можно сказать / написать о производительности fps в сети, но я уверен, что эти короткие советы помогут вам в вашем поиске производительности веб-анимации.