предисловие
Несколько дней назад посылка былаcodepen
увидеть одинМеч ЦиЭффект загрузки, большой сюрприз, снова былCSS
убежденный. Я хотел сделать это со всеми вамиМеч ЦиЗагрузившись, после поиска Сяобао обнаружил, что Сяолу добился этого, поэтому больше не играл топором.
Является ли Сяобао человеком, которого можно убедить? конечно!
Сяобао ломал голову и придумал очень интересный узор, который представляет собой просто ци меча.plus
Версия.
🐱🏍🐱🏍react
значок, слишком экстремально, это не ци мечаplus
?react
Переместите пакет*!🐱🏍🐱🏍*
адрес проекта:реагировать двигаться
рисунок значка реакции
react
Значок должен быть всем знаком, он состоит из трех эллипсов одинакового размера и окружности в центре. Использование эллипсов и круговborder-radius
выполнить.
- Сначала подготовьте три эллипса и центральный круг.
html
структура
<div class="react">
<div class="electron"></div>
<div class="electron-alpha"></div>
<div class="electron-omega"></div>
</div>
- Три эллипса одинаковы, напишите общий стиль эллипса, чтобы получить три перекрывающихся эллипса.
.react > [class^="electron"] {
border: #5ed3f3 solid 2px;
border-radius: 100%;
width: 100%;
/* CSS变量 --electron-orbit-size值为72px */
height: var(--electron-orbit-size);
}
- Установите наклон второго и третьего эллипса равным
60deg
а также-60deg
.electron-alpha {
transform: rotate(60deg);
}
.electron-omega {
transform: rotate(-60deg);
}
- использовать
react: before
Псевдоэлемент рисует центральный круг, а при абсолютном позиционировании центральный круг позиционируется в центре.react
Рисунок иконы завершен.
.react:before {
position: absolute;
top: 50%;
left: 50%;
width: var(--nucleus-size);
height: var(--nucleus-size);
margin-top: calc(var(--nucleus-size) / -2);
margin-left: calc(var(--nucleus-size) / -2);
background: var(--electron-color-hex);
}
.react > [class^="electron"] {
position: absolute;
top: 50%;
margin-top: calc(var(--electron-orbit-size) / -2);
}
реагируйте на дизайн анимации значков
Число дней — пятьдесят, а даоянь — сорок девять.Есть еще проблеск жизни, и отсутствие его может создать особую красоту.
Итак, давайте попробуем убрать часть эллипса, чтобы посмотреть, получится ли крутой динамический эффект?
Предположим, что начальное состояниеborder-left
Лира, следуйВнизу слева вверху справаПорядок отсутствует один за другим, давайте посмотрим на эффект анимации.
- оживлять
electron-orbit
Переключить отсутствующие ребра по порядку
@keyframes electron-orbit {
0% {
border-top: rgba(94, 211, 243, 1) solid 2px;
border-right: rgba(94, 211, 243, 1) solid 2px;
border-bottom: rgba(94, 211, 243, 1) solid 2px;
border-left: rgba(94, 211, 243, 0) solid 2px;
}
25% {
border-top: rgba(94, 211, 243, 1) solid 2px;
border-right: rgba(94, 211, 243, 1) solid 2px;
border-bottom: rgba(94, 211, 243, 0) solid 2px;
border-left: rgba(94, 211, 243, 1) solid 2px;
}
50% {
border-top: rgba(94, 211, 243, 1) solid 1px;
border-right: rgba(94, 211, 243, 0) solid 2px;
border-bottom: rgba(94, 211, 243, 1) solid 4px;
border-left: rgba(94, 211, 243, 1) solid 2px;
}
75% {
border-top: rgba(94, 211, 243, 0) solid 2px;
border-right: rgba(94, 211, 243, 1) solid 2px;
border-bottom: rgba(94, 211, 243, 1) solid 2px;
border-left: rgba(94, 211, 243, 1) solid 2px;
}
100% {
border-top: rgba(94, 211, 243, 1) solid 2px;
border-right: rgba(94, 211, 243, 1) solid 2px;
border-bottom: rgba(94, 211, 243, 1) solid 2px;
border-left: rgba(94, 211, 243, 0) solid 2px;
}
}
Эффект анимации в целом все еще в порядке, но поскольку отсутствует часть из0 -> 1
, прозрачность меняется слишком сильно, в результате чего анимация в целом становится прерывистой.
- Уменьшите прозрачность отображаемых краев соответственно
0.5 0.35 0.2 0
После уменьшения прозрачности согласованность анимации значительно улучшилась, но ощущение линии очень плохое.Далее продолжайте изменять толщину линии.
- Измените толщину линии, градиент толщины
4px 2px 1px 0px
Три эллипса используют одинаковую анимацию и запускаются в одно и то же время, поэтому ритм анимации остается одинаковым и выглядит немного жестковатым.Мы устанавливаем уникальный ритм анимации для каждого эллипса.
- Установите разное время задержки анимации для каждого эллипса соответственно
1.2s 1s 0.8s
Добавить анимацию мяча
Только линейная анимация все еще немного однообразна, продолжайте оптимизировать, добавьте маленький шарик к недостающей части, маленький шарик движется вместе с недостающей частью, а маленький шарик также сопровождается эффектом увеличения и уменьшения масштаба.
@keyframes electron {
0% {
left: calc(var(--electron-size) / -1);
transform: scale(1);
}
12.5% {
top: 100%;
transform: scale(1.5);
}
25% {
left: 100%;
transform: scale(1);
}
37.5% {
top: 0%;
transform: scale(0.25);
}
50% {
left: calc(var(--electron-size) / -1);
transform: scale(1);
}
62.5% {
top: 100%;
transform: scale(1.5);
}
75% {
left: 100%;
transform: scale(1);
}
87.5% {
top: 0%;
transform: scale(0.25);
}
100% {
left: calc(var(--electron-size) / -1);
transform: scale(1);
}
}
Как, похоже, что-то есть, не волнуйтесь, есть последний шаг, пусть значок двигается.
значок двигаться
Добавьте анимацию вращения и увеличения и уменьшения масштаба значка в целом, чтобы завершить окончательный вариант.react loading
эффект
@keyframes react {
0% {
transform: rotate(0deg) scale(1);
}
12.5% {
transform: rotate(-45deg) scale(0.9);
}
25% {
transform: rotate(-90deg) scale(1);
}
37.5% {
transform: rotate(-135deg) scale(0.9);
}
50% {
transform: rotate(-180deg) scale(1);
}
62.5% {
transform: rotate(-225deg) scale(0.9);
}
75% {
transform: rotate(-270deg) scale(1);
}
87.5% {
transform: rotate(-315deg) scale(0.9);
}
100% {
transform: rotate(-360deg) scale(1);
}
}
Репозиторий исходного кода
Адрес источника:реагировать двигаться
адрес проекта:реагировать двигаться
Не забудьте поставить пакету ⭐, если вы считаете его полезным.
Замечательные статьи в прошлом
- Последний письменный тест Nioke по интерфейсу JS, 100 вопросов
- Резюме последних предварительных вопросов интервью Ниуке (включая анализ)
- CSS реализует свободно летящую птицу 🐦
- Получите последние предварительные вопросы интервью Niuke и 500 горячих точек интервью JS для анализа данных.
- Примите кошку для VSCode и веб-сайта
- Душевная пытка родного JavaScript (1), сколько вы можете ответить?
- Глубокое понимание прототипа и цепочки прототипов в JavaScript
- Глубокое понимание EventLoop в JavaScript
- «2w Word Big Chapter 38 Interview Questions» подробно разъясняет эту проблему указания в JS.
послесловие
Друзья, если вы чувствуете, что эта статья вам полезна, ставьте лайк Абао👍 или подписывайтесь➕ — это самая большая поддержка для меня.
Кроме того, если есть какие-либо проблемы с этой статьей или если вы не понимаете часть статьи, вы можете ответить мне в области комментариев, давайте обсудим, изучим и добьемся успеха вместе!