Страницы

Поиск по вопросам

пятница, 14 февраля 2020 г.

Трансформация поворота в SVG?

#css3 #svg #анимация #css_animation #transform


Столкнулся с непониманием, как сделать поворот определенной части сгруппированной
svg части объекта. Приведу пример 



.game_block {
  position: relative;
  width: 100%;
  height: 100%;
  min-height: 100vh;
}

.btn_gamePlay {
  width: 100vh;
  height: 100vh;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  background: none;
  transition: 0.2s all;
}

.st7 {
  fill: #70203c;
}

.st8 {
  fill: #ef447e;
  stroke: #5e112d;
  stroke-width: 0.5;
  stroke-miterlimit: 10;
}

.za_rightArm__one {}

.za_rightArm__two {
  transition: .2s linear;
  transform-origin: 100% 40px;
  transform: rotate(0deg);
}

.game_block:hover .za_rightArm__two {
  transition: .2s linear;
  transform: rotate(35deg);
}
Идея следующая. По наведению на область в которой находиться кнопка, SVG картинка выбрасывает руку вверх, при выходе из области hover опускает с предварительной задержкой. Пытаюсь понять, как в SVG задается transform-origin, но что-то пока не дошло. Пробовал читать но ясности не принесло. Как определить вот эти вот точки объектов, а потом организовать правильный поворот. (Желательно что б оно ещё и FF работало, а то постоянно мне там баги лезут)


Ответы

Ответ 1



Понял, свою ошибку. Можно сделать и без привлечения сторонних библиотек. Просто надо правильно задавать контрольные точки и делать смещение .game_block { position: relative; width: 100%; height: 100%; min-height: 100vh; } .btn_gamePlay { width: 100vh; height: 100vh; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: none; transition: 0.2s all; } .st7 { fill: #70203c; } .st8 { fill: #ef447e; stroke: #5e112d; stroke-width: 0.5; stroke-miterlimit: 10; } .za_rightArm__one { transform-origin: 50px 100px; transition: .2s all; transform: translateX(0) translateY(0); } .game_block:hover .za_rightArm__one { transform-origin: 50px 100px; transition: .2s all; transform: translateX(-11px) translateY(-20px); } .za_rightArm__two { transform-origin: 50px 100px; transition: .2s all; transform: rotate(0deg) translateX(0) translateY(0); } .game_block:hover .za_rightArm__two { transform-origin: 50px 100px; transition: .2s all; transform: rotate(46deg) translateX(14px) translateY(-10px); }


Ответ 2



Вариант очень сырой, выкладываю по предложению автора вопроса. Пример будет доработан. Анимация начинается после клика по кнопке .container { width:75%; height:75%; } .game_block { position: relative; width: 100%; height: 100%; min-height: 100vh; } .btn_gamePlay { width: 100vh; height: 100vh; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: none; transition: 0.2s all; } .st7 { fill: #70203c; } .st8 { fill: #ef447e; stroke: #5e112d; stroke-width: 0.5; stroke-miterlimit: 10; }


Комментариев нет:

Отправить комментарий