我最近发现了一个包含一些缓动函数的网站:http://gizma.com/easing/
我尝试从这个网站上实现一个“二次缓动进出”的函数到我的脚本中,但是我的精灵似乎非常快地飞离了屏幕。我不确定我的逻辑错误在哪里,需要帮助理解我的错误。
我的缓动函数看起来像这样:
//t = time, b = startvalue, c = change in value
function ease(t, b, c, duration) {
t /= duration/2; //duration is in milliseconds
if (t < 1) return c/2*t*t + b;
t--;
return -c/2 * (t*(t-2) - 1) + b;
};
我的代码用于动画运动是从一个 mousedown
监听器中触发的:
function animate(e){
clearTimeout(timer);
var duration = 2000; //2 seconds
var startX = camera.x;
var startY = camera.y;
var targetX = e.offsetX - element.width/2 + camera.x; //world space
var targetY = e.offsetY - element.height/2 + camera.y; //world space
var vectorX = targetX - startX / duration;
var vectorY = targetY - startY / duration;
var startTime = Date.now();
function update(){
var t = Date.now() - startTime; //time elapsed so far
var cX = vectorX * t; //change in X
var cY = vectorY * t; //change in Y
var amountX = ease(t,startX,cX,duration); // see function above
var amountY = ease(t,startY,cY,duration);
var difX = startX - amountX; //get the difference
var difY = startY - amountY;
camera.x += difX;
camera.y += difY;
if (t >= duration){
clearTimeout(timer);
} else {
timer = setTimeout(update,0);
}
}
update();
}
什么让动画运行如此之快并且移动距离那么远?
编辑:添加了jsfiddle链接以便参考:http://jsfiddle.net/a86m33nj/