将 CSS transition-timing-function 翻译成滑动

Translate CSS transition-timing-function to swiping

我正在使用自定义计时函数 (http://cubic-bezier.com/#1,0,1,1) 淡入 div(使用 CSS 转换)。计时功能基本上是'ease-in'.

的更极端版本
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);

(当然你可能会找到最适合你需要的更好的方程式)