使用 Javascript 创建自定义缓动
Create Custom Easing using Javascript
我正在尝试创建自定义缓动函数,但遇到了一些困难。换句话说,数学让我感到困惑...
我希望我的函数增加我页面中一些元素的宽度,增量值需要随着元素索引的增加而减小。
考虑这些值:
50, 150, 230, 280, 310, 330
虽然我知道可能无法生成这些精确值,但我本质上想要一个接近这些值的函数。
这是我目前的情况:
$('.something').each(function(i){
var scale = Math.round(30*(i/10)*(2-(i/10)));
dimension = scale*dimension;
console.log(dimension);
});
这可能非常简单,但我今天正在努力理解数学,因此非常感谢任何帮助
这是一个现场演示,展示了如何使用二次 ease-out 函数来获得与您描述的曲线相似的曲线。
var out = document.getElementById("output");
// t: current time, b: beginning value, c: change in value, d: duration
function easeOutQuad(t, b, c, d) {
return -c *(t/=d)*(t-2) + b;
}
for (var i = 0; i < 1; i+=0.1) {
out.innerHTML += Math.round(easeOutQuad(i, 50, 280, 1)) + "<br>";
}
<div id="output"></div>
Shout-out 到 @c-smile 用于链接评论中的 jQuery easeOutQuad function,此演示基于此。
你可以浏览一下Easing Functions Generator by Robert Penner。它可能对创建自定义缓动函数非常有用:
// generated example
function(t, b, c, d) {
var ts=(t/=d)*t;
var tc=ts*t;
return b+c*(63.2425*tc*ts + -185.23*ts*ts + 198.58*tc + -93.89*ts + 18.2975*t);
};
我正在尝试创建自定义缓动函数,但遇到了一些困难。换句话说,数学让我感到困惑...
我希望我的函数增加我页面中一些元素的宽度,增量值需要随着元素索引的增加而减小。
考虑这些值:
50, 150, 230, 280, 310, 330
虽然我知道可能无法生成这些精确值,但我本质上想要一个接近这些值的函数。
这是我目前的情况:
$('.something').each(function(i){
var scale = Math.round(30*(i/10)*(2-(i/10)));
dimension = scale*dimension;
console.log(dimension);
});
这可能非常简单,但我今天正在努力理解数学,因此非常感谢任何帮助
这是一个现场演示,展示了如何使用二次 ease-out 函数来获得与您描述的曲线相似的曲线。
var out = document.getElementById("output");
// t: current time, b: beginning value, c: change in value, d: duration
function easeOutQuad(t, b, c, d) {
return -c *(t/=d)*(t-2) + b;
}
for (var i = 0; i < 1; i+=0.1) {
out.innerHTML += Math.round(easeOutQuad(i, 50, 280, 1)) + "<br>";
}
<div id="output"></div>
Shout-out 到 @c-smile 用于链接评论中的 jQuery easeOutQuad function,此演示基于此。
你可以浏览一下Easing Functions Generator by Robert Penner。它可能对创建自定义缓动函数非常有用:
// generated example
function(t, b, c, d) {
var ts=(t/=d)*t;
var tc=ts*t;
return b+c*(63.2425*tc*ts + -185.23*ts*ts + 198.58*tc + -93.89*ts + 18.2975*t);
};