Когда я в это время посмотрел несколько дорам на Douban, я обнаружил, что анимация загрузки Douban довольно хороша. Поэтому я решил подражать этому и написать один.
Я пропускаюCSS3
СотрудничатьSVG
Чтобы завершить эту анимацию загрузки, имитирующую Дубана. Не используетсяSVG
Не паникуйте, ниже я напишу соответствующие свойства, чтобы облегчить ваше понимание. Потому что это действительно очень просто. Итак, давайте сразу к делу
инициализировать svg
Нам нужно сначала выполнить статическое笑脸
Инициализировать размер представления SVG
<svg width="100" height="100"></svg>
Я указал ширину и высоту100px
Площадь,width=”100”
а такжеwidth=”100px”
эквивалентны.
нарисовать рот
мы кладем嘴巴
нарисуй его, вsvg
нарисуй круг внутри
<circle class="mouth" cx="50" cy="50" r="14"></circle>
cx
а такжеcy
точка определения атрибутаx
а такжеy
координировать.
Видим, что в браузере есть закрашенная черная точка
Далее мы добавляем наш ротcss
стиль
.mouth {
fill: none;
stroke: #00B51D;
stroke-width: 5;
stroke-linecap: round;
stroke-dasharray: 44, 44;
transform-origin: center; /* transform动画时以自身中心作为基点 */
}
соответствующее свойство
css-свойство | иллюстрировать | здесь |
---|---|---|
fill | Цвет заливки | нет (без наполнения) |
stroke | цвет контура | #00B51D |
stroke-width | ширина контура | 5 |
stroke-linecap | Формы на обоих концах открытого пути | round |
stroke-dasharray | Создайте пунктирную линию | 44, 44 |
transform-origin | Положение базовой точки повернутого элемента | центр (самоцентр) |
Сосредоточьтесь здесьstroke-dasharray
, значение его свойства может бытьnone
,<dasharray>
а такжеinherit
.
<dasharray>
это<length>
а также<percentage>
Последовательность чисел, разделяйте числа запятыми или пробелами и указывайте длину дефисов и пробелов.
Когда параметр: На самом деле это означает длину пунктирной линии и расстояние между каждой пунктирной линией
Когда есть два или более параметра: один для длины и один для интервала
- stroke-dasharray = '10' означает: пунктирная линия длинная
10
,интервал10
, затем повторите пунктирную линию длинной10
,интервал10
- stroke-dasharray = '10, 5' означает: длина пунктирной линии
10
,интервал5
, затем повторите пунктирную линию длинной10
,интервал5
- stroke-dasharray = '20, 10, 5' означает: длина пунктирной линии
20
,интервал10
, пунктирная линия длинная5
, за которым следует интервал20
,пунктирная линия10
,интервал5
, а затем запустите цикл следующим образом
По формуле длины окружностиL=2πr
, радиус окружностиr=14
,такL=87.96452≈88
, то длину пунктирной линии принимаем равной44
,интервал44
Нарисуйте пунктирную линию, которая составляет ровно половину окружности круга.
Видно, что наш嘴巴
часть сделана
рисовать глаза
Далее приступайте к покраске眼睛
, я нарисовал ещеcircle
.
<circle class="eye" cx="50" cy="50" r="14"></circle>
мы все еще можем пройтиstroke-dasharray
нарисовать пару глаз
первый嘴巴
Закомментируйте, чтобы не повлиять на нашу отладку.
Длина тире штрих-dasharray составляет0
, вы можете получить无数个
Пунктирный круг. Согласно формуле периметра круга выше, мы можем получить периметр как88
, то каждый из нас1/4
длина22
, затем мы регулируем интервал до66
. В это время вертикальное расстояние между двумя точками точно90度
Далее мы добавляем наши глазаcss
стиль
.eye {
fill: none;
stroke: #00B51D;
stroke-width: 5;
stroke-linecap: round;
stroke-dasharray: 0, 66;
}
Чтобы выровнять рот, поворачиваем влево45度
,Датьeye
плюсtransform
Атрибуты
transform-origin: center;
transform: rotate(-45deg);
Итак, мы закончили眼睛
охватывать
добавить анимацию
После просмотра анимации загрузки Douban в замедленной съемке (кадр за кадром) бесчисленное количество раз, я наконец нашел закономерность (плачет).
анимация рта
Добавление анимационных эффектов, это также самый захватывающий шаг, давайте сначала посмотрим嘴巴
часть
Через анимацию мы можем видеть嘴巴
часть вращается两圈
, и вращается第一圈
, расстояние между двумя сторонами уменьшается до1/4
,существует第二圈
, интервал возвращается к1/2
, а в конце есть абзац停留时间
.
Согласно последнему абзацу停留时间
а также旋转两圈
мы можем пройтиtransform
готово, просто
@keyframes mounthAni {
80%, 100% {
transform: rotate(720deg);
}
}
第一圈
Когда расстояние между двумя сторонами уменьшается до1/4
, то есть в это времяstroke-dasharray
ценность44, 22
, а затем вернуться к1/2
@keyframes mounthAni {
40% {
stroke-dasharray: 44, 22; /* 间距改为1/4 */
}
80%, 100% {
stroke-dasharray: 44, 44; /* 间距恢复为1/2 */
transform: rotate(720deg);
}
}
Анимация работает со скоростьюНачните быстро, закончите медленно, поэтому мы используемease-out
так какЗначение функции кривой Безье
так嘴巴
Анимация завершена
анимация глаз
Точно так же с помощью анимации мы можем видеть, что眼睛
Детали также вращаются两圈
, и вращается第一圈
, расстояние между двумя сторонами увеличивается до7/8
,существует第二圈
, интервал возвращается к3/4
, а в конце есть абзац停留时间
.
@keyframes eyeAni {
40% {
stroke-dasharray: 0, 77; /* 间距改为7/8 */
}
80%, 100% {
transform: rotate(675deg); /* 间距恢复为3/4 */
stroke-dasharray: 0, 66;
}
}
Анимация работает со скоростьюначать и закончить медленно, поэтому мы используемease-in-out
так какЗначение функции кривой Безье
Пока наш眼睛
Анимация закончена
Мы объединили две анимации, чтобы завершить анимацию загрузки, имитирующую Douban, что очень просто.
исходный код
html
<svg width="100" height="100">
<circle class="mouth" cx="50" cy="50" r="14"></circle>
<circle class="eye" cx="50" cy="50" r="14"></circle>
</svg>
css
.mouth {
fill: none;
stroke: #00B51D;
stroke-width: 5;
stroke-linecap: round;
stroke-dasharray: 44, 44;
transform-origin: center; /* transform动画时以自身中心作为基点 */
animation: mounthAni 2.3s ease-out infinite;
}
.eye {
fill: none;
stroke: #00B51D;
stroke-width: 5;
stroke-linecap: round;
stroke-dasharray: 0, 66;
transform-origin: center;
transform: rotate(-45deg);
animation: eyeAni 2.3s ease-in-out infinite;
}
@keyframes mounthAni {
40% {
stroke-dasharray: 44, 22; /* 间距改为1/4 */
}
80%, 100% {
stroke-dasharray: 44, 44; /* 间距恢复为1/2 */
transform: rotate(720deg);
}
}
@keyframes eyeAni {
40% {
stroke-dasharray: 0, 77; /* 间距改为7/8 */
}
80%, 100% {
transform: rotate(675deg); /* 间距恢复为3/4 */
stroke-dasharray: 0, 66;
}
}
Суммировать
CSS3
Анимация достаточно мощная, но если вы хотите добиться того же интервала, что и выше, вы можете变大变小
анимационные эффекты, используйте толькоCSS
Я так и не понял как это реализовать.Если есть способ,прокомментируйте и расскажите 😀,поэтому я им воспользовалсяSVG
ДобавитьCSS
Чтобы сделать,眼睛
Некоторые изначально думали об использованииanimateMotion
Только что закончила, но после долгого прочтения до сих пор не могу им пользоваться🤣, поэтому думала пользоваться только имCSS
Анимационный эффект завершил эту анимацию, я не ожидал, что она окажется неожиданно простой, поэтому хочу поделиться с вами методом. Вся анимация загрузки вращается вокругstroke-dasharray
расширять, использоватьSVG
Атрибуты — это действительно верхушка айсберга. Если в приведенном выше содержании есть какие-либо ошибки, я надеюсь, что вы можете дать мне дополнительный совет.