Вы сказали, что хотите "переход" , но используете animation
. Если вы хотите переход, используйте переход.
«Да, но как мне сделать так, чтобы он шел дальше конечной точки?» [кто-то может сказать.]
Использовать пользовательский bezier-curve
функция синхронизации, при которой ордината будет вне диапазона [0, 1]. Это создаст эффект отскока.
Оттуда легко контролировать два состояния вашего элемента, так как вам нужно изменить только одно значение.
#myAnimation {
height: 40px;
width: 40px;
background: red;
transform: translate(-40px, 0);
transition: transform 1.5s cubic-bezier(0, 0, 0.5, 3);
}
:checked ~ #myAnimation {
transform: translate(100px, 0);
}
body{ margin:0; }
<input type="checkbox" id="check"><label for="check">show elem</label>
<div id="myAnimation"></div>
Примечание. В приведенном выше примере я использовал transform
вместо исходного left
, поскольку по соображениям производительности это должно быть предпочтительным способом, но это будетработать с любым анимируемым свойством.
Кроме того, я использовал простой флажок в качестве элемента управления, но вы можете удерживать кнопку + js для переключения класса, который будет делать то же самое.