в последних проектахAnt DesignДоступ больше, это еще очень хорошо. Не знаю, встречали ли вы такой эффект.На официальном сайте, если навести мышку на Логотип, букваi
Значок на изменениях не остановится, после того, как выйдет из остановки, снова поменяйте, можно считать небольшое яйцо (вероятно, я не видел до 🤣), продемонстрировать следующее:
Но неудивительно, что я его не нашел, потому что этот эффект реализует js, и он должен дождаться завершения загрузки, прежде чем он сможет подействовать, а официальный сайт иногда очень тормозит.hover
эффект
Что ж, если подумать, этого эффекта можно добиться с помощью чистого CSS, стоимость реализации невелика, а описанной выше проблемы с загрузкой можно эффективно избежать.
Во-первых, принцип реализации CSS
Весь принцип реализации примерно такой
- Подготовьте материал, содержащий все маленькие значки
- Создайте покадровую анимацию CSS, которая меняет положение фона.
- Управление анимацией при наведении мыши
2. Подготовка материала
Во избежание многократных запросов и для облегчения создания анимаций все материалы малых иконок объединены вместе (сохранены с официального сайта), как и предыдущая «Карта спрайтов», следующим образом
Предположим, что структура HTML такая
<h1 class="logo">Ant Design</h1>
Для лучшей семантики рекомендуется оставить текст здесь, а затем скрыть текст другими средствами (например, прозрачностью), логотип можно использовать в качестве фонового изображения, а затем небольшую изменяемую иконку можно сгенерировать с помощью псевдоэлементов ( все декоративные элементы могут быть псевдоэлементами).Элемент для генерации, чтобы обеспечить чистоту HTML), CSS выглядит следующим образом
.logo{
width: 500px;
height: 100px;
position: relative;
color: transparent;
background: url('https://imgservices-1252317822.image.myqcloud.com/image/012420220165011/c0e82c29.svg') center/contain no-repeat;
cursor: pointer;
}
.logo::after{
content: '';
position: absolute;
width: 32px;
height: 32px;
background: url('https://imgservices-1252317822.image.myqcloud.com/image/012420220165415/b0005044.svg') 0 / cover no-repeat;
right: 113px;
top: -18px;
}
статическая компоновка
Во-вторых, покадровая CSS-анимация.
Тогда есть анимация, просто используйте функцию анимации CSS вsteps()функциональный символ, вы можете добиться покадровой анимации
Сначала определите ключевой кадр и измените положение фона.
@keyframes random {
to {
background-position: 100%;
}
}
Здесь маленькие значки имеют в общей сложности11Чжан, изменение между собой10шаг, поэтому анимация устанавливается следующим образом
.logo::after{
/*其他样式*/
animation: random 1s steps(10) infinite;
}
Это приводит к бесконечному циклу покадровой анимации.
3. Приостановите и запустите анимацию CSS
По умолчанию анимация CSS запускается по умолчанию, но теперь требуется, чтобы только мышьhover
Он будет двигаться вверх.
Некоторые учащиеся могут так делать, по умолчанию анимации нет, а анимация создается при наведении, вот так
.logo::after{
/*默认无动画*/
}
.logo:hover::after{
animation: random 1s steps(10) infinite;
}
Но есть две проблемы с этим:
- Больше затрат на производительность в расчете на анимацию, созданную в режиме реального времени.
- Положение восстанавливается до исходного состояния каждый раз, когда мышь остается.
Поэтому такой подход не рекомендуется
В дополнение к вышеперечисленным методам управления запуском анимации вы также можете передатьanimation-play-state
Активно установите паузу следующим образом
.logo::after{
/*其他样式*/
animation: random 1s steps(10) infinite;
animation-play-state: paused; /*动画暂停*/
}
Таким образом, он не будет двигаться по умолчанию, а затем вhover
"бежать", когда
.logo:hover::after{
animation-play-state: running; /*动画运行*/
}
Эффект следующий
В-четвертых, укажите начальную позицию
Теперь по умолчанию маленький значок стоит первым, если вы хотите указать другой, например ❤
Как справиться с этой ситуацией
Во-первых, мы думали, что можем вручную изменить положение фона, ❤ находится на 8-м месте, поэтому
.logo::after{
/*其他样式*/
background-position: -224px; /* 32 * 7 */
}
Эффект следующий
В этом пути больше проблем, так как начальная позиция анимации изменена, анимация перемещается с 8-го места в крайнее правое, а левое не проходит, и шаг нужно перенастраивать.
В дополнение к этому способу это также может быть достигнуто за счет «отрицательной задержки» анимации,После добавления отрицательной задержки к анимации анимация будет двигаться вперед к будущей позиции..
Например, если вы хотите указать положение 7-го кадра в будущем, вы можете задержать 7/10 отрицательной общей длительности движения, и реализация выглядит следующим образом.
.logo::after{
/*其他样式*/
animation-delay: -.7s; /* 7 / 10 * 1s*/
}
Это не повлияет на оригинальную анимацию, идеальная реализация
Полный код доступен по адресу:Ant Design Logo (codepen.io)
Прикрепите полный код (в последнее время codepen кажется нестабильным)
.logo{
width: 500px;
height: 100px;
position: relative;
color: transparent;
background: url('https://imgservices-1252317822.image.myqcloud.com/image/012420220165011/c0e82c29.svg') center/contain no-repeat;
cursor: pointer;
}
.logo::after{
content: '';
position: absolute;
width: 32px;
height: 32px;
background: url('https://imgservices-1252317822.image.myqcloud.com/image/012420220165415/b0005044.svg') 0 / cover no-repeat;
right: 113px;
top: -18px;
animation: random 1s -.7s steps(10) infinite;
animation-play-state: paused;
}
.logo:hover::after{
animation-play-state: running;
}
@keyframes random {
to {
background-position: 100%;
}
}
V. Резюме и объяснение
Выше приведена реализация CSS для эффекта логотипа официального веб-сайта Ant Design.Количество кода очень мало, и это также позволяет избежать проблемы, когда js не загружается, и опыт лучше.Ниже приводится краткое резюме
- Рендеринг CSS является своевременным, пока страница видна, это не повлияет на взаимодействие с CSS.
- Покадровую анимацию можно реализовать с помощью функции step() в анимации CSS.
- Анимации CSS могут запускаться автоматически или приостанавливаться вручную.
- Установив отрицательную задержку, вы можете заставить анимацию CSS запускаться раньше.
Конечно, преимуществ CSS больше, чем это Когда я открываю консоль Ant Design, меня немного ломает то, что она постоянно меняется.svg
Реализована ссылка, если она всегда размещена на лого, то она будет постоянно запрашивать картинки, а маленькая иконка тоже будет "мигать".
Количество запросов немного ошеломляет. Если небольшой партнер, отвечающий за официальный сайт Ant Design, увидит это, можно ли его оптимизировать?
Наконец, если вы считаете, что это хорошо и полезно для вас, пожалуйста, поставьте лайк, добавьте в закладки и перешлите ❤❤❤