«Это 21-й день моего участия в ноябрьском испытании обновлений. Подробную информацию о мероприятии см.:Вызов последнего обновления 2021 г."
🎄 Предисловие
Когда я посещал сообщество несколько дней назад, я наткнулся на очень приятныйэффект полета птицы, и чистыйcss
осуществленный.
Это не может не удивлять меня,css
Мир можно описать как глубокий, как море, люди любят его и ненавидят.
Я маленькая птичка, я хочу летать, но не могу летать высоко, я ищу одну, теплые объятия~~~ 🐤🐥🐥🐤
🍂 Давайте к делу, давайте вместе реализовывать вольную птицу🐦.
Изучив эту статью, вы сможете освоить следующие знания🍔:
-
border
Рисование простых геометрических фигур. -
transform
иanimation
знание - Добудьте милую летающую птицу
📕 изучение пограничной собственности
border
Это очень волшебное и очень могущественное свойство.border
Можно реализовать множество простых геометрических фигур.
Вот несколько примеров, чтобы научить васborder
Механизм рендеринга:
- настраивать
div
изwidth
иheight
за0
, установить четыре направленияborder
Разные цвета.
border-left: 30px solid red;
border-right: 30px solid blue;
border-top: 30px solid green;
border-bottom: 30px solid pink;
- Они установлены
height: 20px;width: 0
width: 20px;height:0
иwidth: 20px;height:20px
Вышеприведенное изображение установлено в порядке шага 2
- не задано
border-top
Левое изображение показывает высоту: 20 пикселей без границы сверху; правое изображение показывает ширину: 20 пикселей без границы сверху
📄Рисование границ простое графическое резюме
Из приведенных выше трех случаев мы можем сделать вывод, чтоborder
Правила рисования простых графиков со свойствами:
-
border
Он разделен на четыре направления, и в каждом направлении рисуется по одной части.Если ширина и высота равны0
, каждое направление рисуется как треугольник, иначе как трапеция. -
border
Ширина - это высота нарисованной трапеции -
height
Оказать влияниеborder-left
иborder-right
,width
Оказать влияниеborder-top
иborder-bottom
(например, установка примера 2) - Когда одно направление не нарисовано,
border
Будет рисовать только часть противоположного направления и рисовать только общее (например, настройка примера 3, она будет разрезана пополам)
🐣 Рисуем птиц
На приведенном выше рисунке видно, что птица состоит из четырех частей: головы, основного тела, крыльев и хвоста, которые состоят из простых геометрических фигур. Таким образом, вы можете пройтиborder
Для реализации давайте реализуем следующие голову и крылья.
🐱🚀 Реализация заголовка
Голова представляет собой треугольник, смотрите прямо на код
/* 设置 bottom 显示, left/right 为透明 */
border-right: 15px solid transparent;
border-bottom: 30px solid #6b83fa;
border-left: 15px solid transparent;
🛫 Реализовать правое крыло
Правое крыло состоит из двух частей, прямоугольной трапеции и прямоугольного треугольника. пройти черезborder
Часть примера 3 показывает, что если вы не установитеborder-top
,border-left/right
Эффект настройки также будет сокращен пополам, чтобы сформировать прямоугольную сторону.Мы можем использовать эту функцию для завершения настройки прямоугольных треугольников и прямоугольных трапеций.
- Реализация прямоугольного треугольника
/* 设置 border-left, borde-bottom 为透明 */
border-left: 30px solid #c0a9e0;
border-bottom: 30px solid transparent;
- Реализация прямоугольной трапеции
/* 设置 height 拉长 left 形成梯形效果 */
height: 30px;
border-left: 30px solid #8567f0;
border-bottom: 10px solid transparent;
🎈 Сборка птиц
- сборка птицы
пройти черезposition: relative
иposition: absolute
Соберите графику, собранная птица выглядит так, как показано ниже.
Поскольку птица собирается только путем позиционирования, все части птицы находятся в одной плоскости, что выглядит очень жестко.
- Сделайте птицу более трехмерной
пройти черезtransform: rotate
иtransform-origin
Атрибуты Поверните голову, хвост и крылья птицы, чтобы создать трехмерное ощущение.
Например заголовок:
/* 设置 transform 的基点 */
transform-origin: 50% 100%;
/* 沿 x 轴偏移,负值逆时针旋转*/
transform: rotateX(-20deg);
проходить черезrotate
Преобразованная птица намного ярче.
🌀 Осознайте ветер
Реализация ветра не сложная, достигается через теги div и :before.
.wind {
position: absolute;
width: 4px;
height: 200px;
/* 风是移动的,通过 overflow 可以限制风的长度 */
overflow: hidden;
}
.wind:before {
before {
content: "";
position: absolute;
width: 4px;
height: 300px;
background: rgba(100, 200, 207, 0.3);
transform: translateY(-300px);
-webkit-animation: wind 2331ms 1268ms linear infinite;
animation: wind 2331ms 1268ms linear infinite;
}
может быть достигнутwind
, а затем следуйте инструкциям выше, чтобы достичь10
Группаwind
, эффект после реализации следующий:
10
Группаwind
перекрываются, используяtransform: translate3d
Приводить в порядокwind
Положение постоянно регулируется, и окончательный эффект выглядит следующим образом:
🎡 Пусть ветер дует
Принцип эффекта движения ветра очень прост: .wind установите высоту: 200px, она будет скрыта, если превысит 200px, а свойство animation можно использовать в псевдоклассе :before для перемещения трансляции ветра.
@-webkit-keyframes wind {
0% {
transform: translateY(-300px);
}
100% {
transform: translateY(200px);
}
}
.wind:before {
transform: translateY(-300px);
/* 设置每个风的延迟时间和持续时间都不相同 */
animation: wind 2249ms 3544ms linear infinite;
}
Ветер пошевелился, и теперь эффект выглядит очень приятно для глаз, просто не хватает птиц в полете.
🚀 Лети, птичка
Прежде чем позволить птице летать, давайте сначала установим некоторые основные свойства.
Инициализировать 3D
- настраивать
transform-style
:preserve-3d
включи3D
оказывать - настраивать
perspective
: установите расстояние просмотра, чтобы летящие птицы выглядели более похожими на людей. - настраивать
drop-shadow
: Как у птиц в реальном мире может не быть теней?
Анимация двух крыльев
Самое главное, чтобы заставить птицу летать, это двигать крыльями и соответственно задавать две анимации.wingRight
иwindLeft
/* 两翼翅膀的时针相反,因此动画是反的 */
@keyframes wingRight {
0% {
transform: rotateY(40deg);
}
100% {
transform: rotateY(-40deg);
}
}
@-webkit-keyframes wingLeft {
0% {
transform: rotateY(-40deg);
}
100% {
transform: rotateY(40deg);
}
}
После настройки анимации необходимо выполнить важный шаг.transform-origin
, возьмем для примера правое крыло, крыло должно вращаться по красной линии кадра
transform-origin
По умолчанию50% 50% 0
, очевидно, что требования поворота не могут быть выполнены.Согласно знанию системы координат браузера, установлено правое крылоtransform-origin
за0 0
, аналогичным образом установите левое крыло как100% 0
Общая анимация
Легкие полеты на самолете немного скучны и скучны.Как эльфы в небе, птицы должны летать свободно. добавить петлю к птицеz
ось360°
Анимация вращения.
🛕 Репозиторий исходного кода
Портал:flybird
Не забудьте поставить пакету ⭐, если вы считаете его полезным.
Недавние события
- Используйте анимацию частиц, чтобы запомнить время весеннего фестиваля | Поддержите эмодзи
- Вращай, реагируй! - Танцующие иконки React
- Супердекомпрессия, реализующая универсальные гравитационные и отталкивающие эффекты частиц
Серия JavaScript для продвинутых пользователей
- JavaScript углубил понимание прототипа и цепочки прототипов.
- Расширенное изучение JavaScript перед компиляцией
- JavaScript Advanced Полностью проясните этот наводящий вопрос в JS | «2w Word Big Chapter 38 Вопросы для интервью»
- Глубокое понимание EventLoop для продвинутого JavaScript
- Расширенная область действия JavaScript и цепочка областей видимости
часть интервью
- Резюме последних предварительных вопросов интервью Ниуке (включая анализ)
- Последний письменный тест Nioke по интерфейсу JS, 100 вопросов
- В 2021 году крупные компании, работающие с клиентами, ответили на эти вопросы, написанные от руки.
- Душевная пытка родного JavaScript (1), сколько вы можете ответить?
счастливое программирование
- Примите кошку для VSCode и веб-сайта
- Ссылка на ссылку:код спрей.IO/Y U Su Ken A Kay…
💥 Послесловие
Друзья, если вы чувствуете, что эта статья вам полезна, ставьте лайк Абао👍 или подписывайтесь➕ — это самая большая поддержка для меня.
Кроме того, если есть какие-либо проблемы с этой статьей или если вы не понимаете часть статьи, вы можете ответить мне в области комментариев, давайте обсудим, изучим и добьемся успеха вместе!
Если вы чувствуете, что область комментариев неясна, вы также можете добавить мой WeChat (li444186976) или qq (3315161861) для подробного общения, имя - пакет поля битвы.