使用 css 个关键帧时避免慢动作
avoiding slow motion when using css keyframes
我正在尝试仅使用 CSS 解决方案在悬停时实现此按钮动画:
我已经成功地找到了使用 css 关键帧执行此操作的方法,但现在我面临一些意想不到的慢动作效果,现在我只在此处的左上角进行试验是我到目前为止所做的:
HTML
<a href=""><div class="borderTop"></div></a>
CSS
a {
width: 150px;
height: 50px;
border: 2px solid;
margin: 0 auto;
margin-top: 20%;
display: block;
}
a:hover .borderTop {
width: 10px;
height: 2px;
border-top: 2px solid;
position: relative;
top: -2px;
-webkit-animation: topTheleft 2s alternate;
animation: topTheleft 2s alternate;
}
.borderTop {
width: 10px;
height: 2px;
border-top: 2px solid;
position: relative;
top: -2px;
left: 50px;
}
@-webkit-keyframes topTheleft {
0% { left: -2px; }
50% { left: -30px; }
100% { left: -70px; display: none; }
}
@-o-keyframes topTheleft {
0% { left: -2px; }
50% { left: -30px; }
100% { left: -70px; display: none; }
}
@-moz-keyframes topTheleft {
0% { left: -2px; }
50% { left: -30px; }
100% { left: -70px; display: none; }
}
@keyframes topTheleft {
0% { left: -2px; }
50% { left: -30px; }
100% { left: -70px; display: none; }
}
任何关于如何避免动画中间的慢动作的帮助将不胜感激,提前谢谢你
编辑,有没有一种方法可以让行在到达 left: -70px
时隐藏,过渡效果不是 ansta-hide,也欢迎任何其他解决方案
尝试去掉 50% 的线条:
@-webkit-keyframes topTheleft {
0% { left: -2px; }
100% { left: -70px; display: none; }
}
@-o-keyframes topTheleft {
0% { left: -2px; }
100% { left: -70px; display: none; }
}
@-moz-keyframes topTheleft {
0% { left: -2px; }
100% { left: -70px; display: none; }
}
@keyframes topTheleft {
0% { left: -2px; }
100% { left: -70px; display: none; }
}
貌似默认的计时函数是ease-in-out:从一个动画步到另一个步,速度是慢-快-慢,让它看起来更自然(真实的物理不能让一个物体得到从速度 0 到 100 瞬间)。
所以发生的事情是动画从 0% 开始变慢,变快,然后减慢 50% 的步长,然后再次加速
这是您要找的吗?
https://jsfiddle.net/kvyqyg19/1/
a:hover .borderTop {
/* .. */
-webkit-animation: topTheleft 2s alternate;
animation: topTheleft 2s alternate;
animation-timing-function: linear;
}
@-webkit-keyframes topTheleft {
0% { left: -2px; }
100% { left: -70px; display: none; }
}
/* .. */
我删除了中间 (50%) 步骤并设置了 animation-timing-function: linear;
我正在尝试仅使用 CSS 解决方案在悬停时实现此按钮动画:
我已经成功地找到了使用 css 关键帧执行此操作的方法,但现在我面临一些意想不到的慢动作效果,现在我只在此处的左上角进行试验是我到目前为止所做的:
HTML
<a href=""><div class="borderTop"></div></a>
CSS
a {
width: 150px;
height: 50px;
border: 2px solid;
margin: 0 auto;
margin-top: 20%;
display: block;
}
a:hover .borderTop {
width: 10px;
height: 2px;
border-top: 2px solid;
position: relative;
top: -2px;
-webkit-animation: topTheleft 2s alternate;
animation: topTheleft 2s alternate;
}
.borderTop {
width: 10px;
height: 2px;
border-top: 2px solid;
position: relative;
top: -2px;
left: 50px;
}
@-webkit-keyframes topTheleft {
0% { left: -2px; }
50% { left: -30px; }
100% { left: -70px; display: none; }
}
@-o-keyframes topTheleft {
0% { left: -2px; }
50% { left: -30px; }
100% { left: -70px; display: none; }
}
@-moz-keyframes topTheleft {
0% { left: -2px; }
50% { left: -30px; }
100% { left: -70px; display: none; }
}
@keyframes topTheleft {
0% { left: -2px; }
50% { left: -30px; }
100% { left: -70px; display: none; }
}
任何关于如何避免动画中间的慢动作的帮助将不胜感激,提前谢谢你
编辑,有没有一种方法可以让行在到达 left: -70px
时隐藏,过渡效果不是 ansta-hide,也欢迎任何其他解决方案
尝试去掉 50% 的线条:
@-webkit-keyframes topTheleft {
0% { left: -2px; }
100% { left: -70px; display: none; }
}
@-o-keyframes topTheleft {
0% { left: -2px; }
100% { left: -70px; display: none; }
}
@-moz-keyframes topTheleft {
0% { left: -2px; }
100% { left: -70px; display: none; }
}
@keyframes topTheleft {
0% { left: -2px; }
100% { left: -70px; display: none; }
}
貌似默认的计时函数是ease-in-out:从一个动画步到另一个步,速度是慢-快-慢,让它看起来更自然(真实的物理不能让一个物体得到从速度 0 到 100 瞬间)。
所以发生的事情是动画从 0% 开始变慢,变快,然后减慢 50% 的步长,然后再次加速
这是您要找的吗? https://jsfiddle.net/kvyqyg19/1/
a:hover .borderTop {
/* .. */
-webkit-animation: topTheleft 2s alternate;
animation: topTheleft 2s alternate;
animation-timing-function: linear;
}
@-webkit-keyframes topTheleft {
0% { left: -2px; }
100% { left: -70px; display: none; }
}
/* .. */
我删除了中间 (50%) 步骤并设置了 animation-timing-function: linear;