我在CSS中有一个这样的动画
.outer {
margin: 50px;
}
.inner{
border: 1px solid black;
border-radius: 3px;
width: 100%;
height: 30px;
display: block;
background: linear-gradient(to right, hotpink 50%, transparent 0);
background-size: 200% 100%;
background-position: right;
animation: makeItfadeIn 3s 1s forwards;
}
@keyframes makeItfadeIn {
100% {
background-position: left;
}
}
<div class="outer">
<div class="inner">
</div>
<input type="range" value="20" min="0" max="100" class="inner"/>
</div>
我需要运行第二个动画,我从JavaScript控制。我想动画<input type='range' />
的thumb
。它需要从左向右滑动到某个位置。设置thumb
的位置只能从JS端进行,因此动画也必须在JS中控制。
这很容易:但是,定位必须与在CSS中创建的动画完全同步运行。我可以检测到动画makeItfadeIn
何时在CSS端开始,但是,如何在Javascript中构建一个函数,模仿animation: makeItfadeIn 3s 1s forwards;
:开始时快,结束时慢下来,......所以range
的thumb
从value=0
开始,并与hotpink
条同步移动到value=100
?
1条答案
按热度按时间mcvgt66p1#
这是一个疯狂的旅程:)在https://github.com/gre/bezier-easing有一个很酷的库,我们可以用它来计算一个三次贝塞尔曲线的“Y轴”-然而,大量的警告我没有弄清楚如何实际转换命名曲线,如
ease-in-out
到实际数字-所以这 * 只 * 适用于自定义曲线,就像我在我的CSS目前。X1 E1 F1 X的大量 prop