Идея исходит из шедевра великого бога Codepen, группа роботов танцует богоподобными шагами, но, но, открой, чистая js реализация, js! В любом случае, я хочу попробовать получить такой эффект с помощью SVG+CSS3, o( ̄ヘ ̄o#). Это предпосылка.
1. Базовая графика и базовая анимация
Начнем с простой версии робота, так как упор сделан на анимацию, поэтому проще не бывает.Используются все прямоугольники со скругленными углами в стиле капсулы, но для облегчения замены рук и ног в будущем я по-прежнему послушно ставится Каждая часть, готовая к перемещению, разделяется на другой слой, и к соединению прикрепляется винт. Хорошо, хорошо, простой винт, просто нажмите на черную точку После того, как рисунок будет завершен в AI, этот продукт выглядит следующим образом. (Чтобы облегчить суперпозицию, я добавил прозрачность, а позже узнал, что у прозрачности есть свой смысл дизайна, так тому и быть)
Хотя толку от техники нет, а странные черные пятна по всему телу делают его похожим на 18 бронзовых фигур или что-то вроде акупунктуры и акупунктуры в традиционной китайской медицине, но это не мешает нашему движению робота, давай, передавай привет все, сначала подвигайте головой, подойдите.
Те, кто хоть немного знаком с частью CSS, знают, что проще не бывает.transform:rotate
Properties, единственное, что здесь следует отметить, это то, что при определении анимации необходимо определить transform-origin, начало вращения, вот в чем смысл кучи черных точек на стыках. Потому что в SVG, экспортированном моим ИИ, каждый косяк, т.е.<circle>
центр кругаcx
а такжеcy
Значение - это начало вращения каждой части.
Очень хороший, очень послушный. Теперь, когда он движется и имеет жизнь, независимо от того, основан ли он на кремнии или углероде, дать «ему» красивое имя также удобно называть. Дабая (●—●) нельзя дозвониться, поэтому давайте позвоним Сяобину. «Привет~, я Сяобин»
Сяобин, а теперь я приказываю тебе еще немного пошевелить левой ногой.
Хорошо, дальше другие части движутся вместе.
Что ж, тест завершен, все в норме. Подождите, кажется, что-то не так, если вы сообразительны, вы наверняка обнаружили странность, то есть - в эффекте движения дистальная часть конечности движется, икра движется, а бедро не движется, рука двигается, а локоть не двигается, кашляет, кашляет, да это киборг приколотый и может только бороться. Это была куча «шурупов», которые пригвоздили Сяобина. Почему ты делаешь это? Причина проста, я позволю своему бедру двигаться и посмотрю, что произойдет.
Это? Все выбрасывают, никого не волнует кто? Пожалуйста, вы целое. Теперь возникает вопрос: когда мы определяем свойства анимации CSS, началу вращения каждой подвижной формы присваивается фиксированное значение, так что в этом случае, как мы можем заставить начало координат конечного плеча перемещаться вместе с поворотом верхней конечности? ?
2. Решение для анимации пути SIML
Делать все следует медленно, причем первый этап разборки следует проводить, а двигать следует только верхней половиной конечностей.
Чтобы было легче видеть (теперь ослепленный и неспособный смотреть прямо), Сяобин выслушал приказ, сначала приостановил замах и двинул правым бедром и правой икрой. (Бедро и икра определяются с помощью одной и той же анимации вращения, включая исходную точку, которая единообразно определяется как исходная точка вращения бедра)
Здесь что-то не так? имеют! Это не соответствует законам физики. Давайте сначала разберем его с картинкой, а потом назначим правильное лекарство.
Перебрасывая бедро из положения А в положение Б, я хочу, чтобы эффект голени оставался все время внизу. Оно эквивалентно движению голени без амплитуды маятника, то есть движению по пунктирной линии на рисунке. Подожди, помнишь что-нибудь? отслеживать? Мы упоминали в анимации пути, что можно управлять качанием,
<animateMotion rotate="auto">
Это определение качания с путем. Если он не определен, он не будет качаться по умолчанию. Поскольку круг также может быть путем, давайте воспользуемся здесь анимацией пути, чтобы увидеть, как это сделать. Я уже писал подробное объяснение анимации пути, а здесь я смотрю только на эффект:
Кажется, решить проблему. Однако возникла новая проблема, а именно, когда я хочу качать бедро, моя икра естественно качается, что мне делать?
3. Разобрать SVG и использовать независимые решения системы координат
Перейдите к его анимации пути, правильное решение здесь, потому что SVG - это система координат, то есть мы должны следовать тем же правилам при определении начала вращения, В анимации вращения куба мы сделали шесть граней , шесть SVG, в котором каждая анимация выполняется, не мешая друг другу, эта идея все еще осуществима в нашей анимации.
Проще говоря, я поместил четыре крайние конечности, которые нужно качать, в четыре SVG, взяв в качестве примера правую ногу. Посмотри на картинку, посмотри на картинку. Независимая SVG, в которой икра находится сначала, поддерживает то же вращательное движение, что и бедро.Конечно, начало вращения бедра также используется O2, а форма теленка внутри перемещается в соответствии с началом вращения O1 собственной координаты. системе, потому что в процессе движения SVG система координат также находится в движении, поэтому, хотя начало движения теленка относительно исходной системы координат продолжает меняться, оно остается неизменным в своей собственной системе координат. Это немного сложно, но после понимания идеи анимации все понятно.
Вставьте код, чтобы объяснить, кстати
Прежде всего, самое главное, что при размещении в html атрибут position SVG должен быть определен как абсолютный.Я не буду здесь хвастаться.Все мои друзья знают, потому что наши SVG накладываются друг на друга, поэтому
SVG{position:absolute}
Код CSS для движения выглядит следующим образом (размещена только правая нога):
@keyframes rightLeg{ /*定义右腿大腿的摆动(旋转动画)*/
0%{transform:rotate(0deg); }
100%{transform:rotate(-90deg); }
}
.rightLeg{
animation:rightLeg 1s ease alternate infinite;
transform-origin: /*旋转原点O1*/
}
@keyframes rightLeg2{ /*定义右腿小腿的摆动(旋转动画)*/
0%{transform:rotate(-50deg); }
100%{transform:rotate(50deg); }
}
.rightLeg path{
animation:rightLeg2 0.4s ease alternate infinite ;
transform-origin: /*旋转原点O2*/
}
Часть DOM, бедро, локоть, голова и тело — это один и тот же SVG, а часть голени — отдельный SVG.
<svg class="rightLeg">
<path d=""/> <!--这里可能是path,也可能是rect,总之AI导出什么就是什么啦。-->
</svg>
Ладно, Сяобин, послушай пароль, а теперь пусть все посмотрят на нормальные механические ноги.
Отлично!Теперь икра и бедро могут быть бесшовно соединены между собой, вы можете двигаться как хотите, скорость движения, амплитуду качания вы можете определить по своему желанию.
Остальное опять физический труд, а теперь остальные части можно разобрать по изложенным выше идеям. Я определил его казуально (говорят, что казуально, но каждый должен определяться много, от чего тоже кружится голова), и тут у меня получилась следующая анимация.
Механический танец, достаточно волшебный.
Конечно, если вы достаточно креативны, вы можете играть, как вам нравится. Во всяком случае, Xiaobing - это не моя раса, поэтому вы можете тренировать, как вы хотите. Например, левые и правильные качели кисти (левая рука и правая рука определяются как одинаковую анимацию, а левые и правые ноги определяются как такая же анимация)
Короче говоря, любое определение будет делать, все произвольно.
Помните нашу анимацию с пропуском кадров, смотрите эту статьюnuggets.capable/post/684490…
В нем сделаны некоторые эффекты, например, часы «клик-клик», а еще наш Сяобин умеет двигать «клик-клик-клик». При определении анимации анимации удалите значения легкости, линейного или кубического жаровни, определяющие скорость, и замените их наsteps()
, вы получите мало льда, в котором отсутствует смазочное масло, примерноsteps(n)
В определении значения n вы не можете быть слишком произвольным.В зависимости от времени анимации вращения будет более строго поддерживать постоянную частоту щелчков. Я сделал это, и вы можете увидеть эффект:
Другой пример — у нас крутой процесс сборки. (Первая часть анимации — это сборка частей, которая в основном основана на анимации преобразования: перевод смещения)
Вот именно, рвать его невыносимо.
Если вы чувствуете, что часть тела неподвижна и слишком жесткая, не проблема, сначала очистите свое мышление.Во-первых, все части движутся вместе.При этом бедро вращается в своей системе координат, а икра вращается в своей системе координат. система. . В этом случае добавьте еще один контейнер в исходную структуру DOM.<div>
. Поместите все SVG в это<div>
середина.
Часть CSS остается неизменной, а определение добавления части движения тела выглядит следующим образом:
@keyframes base{
0%{transform:translateX(-100px); }
100%{transform:translateX(100px); }
}
.base{
animation:base 1s ease alternate infinite;
}
Или добавьте еще немного взмаха, и вы получите следующий эффект:
На основе базового динамического эффекта робот Xiaoice можно разнообразить, заменив компоненты SVG, например следующие:
Не забудьте переопределить начало вращения! !
Ключевым моментом в связи динамического эффекта является использование относительной системы координат, то есть, если элемент нуждается в «автоматическом» и «общественном движении» (производном от вращения и вращения, самодельных слов), метод заключается в том, чтобы поместить это в отдельном SVG, каждый SVG имеет свою собственную независимую систему координат, и компоненты, из которых состоят элементы, «автоматически» следуют своей собственной системе координат.
Как только вы освоите этот метод, вы сможете делать с анимацией все, что захотите. Легко сделать колесо обозрения, не так ли? Заинтересованные друзья могут попробовать сами.
Кроме того, кроме того, я действительно знаю, что лучше всего использовать js.Например, в нашей анимации мы можем использовать js для получения значения координаты суставной части, а затем присвоить его началу вращения.Однако, это невозможно~~ Вручную (* ̄ ︶ ̄)