- easeIn函数
function easeInQuad(curtime,begin,end,duration){
let x = curtime/duration; //x值
let y = x*x; //y值
return begin+(end-begin)*y; //套入最初的公式
}
参数: curtime 当前时间,,begin 开始的位置,,end 结束的位置,,duration 动画经过的总时长
1目标:构建平面直角坐标系,x轴表示时间,y轴表示位移,构建一条随x变大,y也变大,k=y/x也随之变大的非线性函数
2 已知x轴的变化域为[0,duration],0<curtime<duration,duration为常数不会变,所以不等式同除duration得,0<curtime/duration<1,因此x轴从时间变为当前时间与总时间的比
3 已知y轴的值域为[0,end-begin],0<end-begin,begin和end均为常数,不等式两边同除end-begin得,0<1,y值从位移变成当前位移与总位移之间的比值
4函数输出结果为当前运动位置,curposition = begin + 当前位移, 当前位移 = 总位移*y (y值是当前位移与总位移之间的比值) = (end-begin)*y
5 y=x × \times ×x函数符合随着x值的增大y和k也随着增大,且当x的变化域为[0,1]时,y的值域为[0,1],函数符合目标
6 用平方根构建的缓慢加速运动 核心函数:x × \times ×x
- easeOut函数
function easeOutQuad(curtime,begin,end,duration){
let x = curtime/duration; //x值
let y = -x*x + 2*x; //y值
return begin+(end-begin)*y; //套入最初的公式
}
easeOut的分析与easeIn同理,是一个用平方根构建的缓慢减速运动 核心函数:x × \times ×x + 2 × \times ×x
- easeInout函数
function easeInoutQuad(curtime,begin,end,duration){
if(curtime<duration/2){ //前半段时间
return easeInQuad(curtime,begin,(begin+end)/2,duration/2);//改变量和时间都除以2
}else{
let curtime1 = curtime-duration/2; //注意时间要减去前半段时间
let begin1 = (begin+end)/2;//初始量要加上前半段已经完成的
return easeOutQuad(curtime1,begin1,end,duration/2);//改变量和时间都除以2
}
}
easeInout函数由easeIn和easeOut组合成,时间前半段是easeIn,后半段是easeOut,关键点在于如何处理后半段easeOut的相关参数