我正在使用自定义计时功能(http://cubic-bezier.com/#1,0,1,1)淡入div(使用CSS过渡)。计时功能基本上是“缓入”的更极端的版本。
div {
opacity: 0;
transition: opacity 1s;
.in {
opacity: 1;
transition-timing-function: cubic-bezier(1, 0, 1, 1);
}
除此之外,我希望能够通过在屏幕上滑动来在div中淡入淡出。我正在使用以下Jquery根据用户刷卡的距离设置不透明度:
documentWidth = $(document).width();
$(document).on('touchmove', function(e) {
// How much of the animation is completed (in %)
completion = e.changedTouches[0].pageX / documentWidth;
$('div').css('opacity', completion);
})
不,这是线性的!那里有一个聪明的数学人,谁能弄清楚如何重述最后一行代表我的计时功能?
因此,例如,如果
completion
为25%,则不透明度应为2%左右。如果为50%,则应为11%左右;如果为75%,则应为31%左右。 最佳答案
首先找到与您的cubic-bezier
曲线近似的曲线。使用给定的点和一些online tools,可以使用以下公式绘制曲线:
y = 464085.7 + (0.0174619 - 464085.7)/(1 + (x/22.88957)^4.174069)
在您的情况下,
x
表示您的completion
变量,而y
表示不透明度。然后你的代码变成
let completion = e.changedTouches[0].pageX / documentWidth;
let exponential = Math.pow((completion / 22.88957), 4.174069);
let opacity = 464085.7 + (0.0174619 - 464085.7)/(1 + exponential);
$('div').css('opacity', opacity);
(当然,您可能会找到最适合您需求的更好的方程式)