【发布时间】:2015-10-06 14:09:00
【问题描述】:
我有一个功能可以轻松地移动我的画布。问题是画布动画不起作用。它只是滚动得太远,而且似乎也太快了。
这是我的函数,它将相机移动到用户在画布上单击的位置:
function moveCamera(e,parent){
clearInterval(parent.scroll);
var mouseData = mousePos(evt,parent); //get x:y relative to element
var initial = {'x':el.width/2,'y':el.height/2},
target = {'x':mouseData.x,'y':mouseData.y},
deltaX = target.x-initial.x,
deltaY = target.y-initial.y,
timeStart = Date.now(),
timeLength = 800,
x,y,deltaTime;
function update(){
function fraction(t){
x = (target.x - initial.x) - (t*deltaX),
y = (target.y - initial.y) - (t*deltaY);
camera.x -= x;
camera.y -= y;
}
function easing(x) {
return 0.5 + 0.5 * Math.sin((x - 0.5) * Math.PI);
}
deltaTime = (Date.now() - timeStart) / timeLength;
if (deltaTime > 1) {
fraction(1);
} else {
fraction(easing(deltaTime));
}
}
parent.scroll = setInterval(update, 10);
}
我附上了一个 JSFiddle 演示的问题:http://jsfiddle.net/p5xjmLay/ 只需单击画布滚动到该位置,您会发现它有点疯狂。
我想知道如何解决这个问题,以便每次都正确更改相机偏移量?
【问题讨论】:
-
@Kaiido 当我有不同的设置时,它是它的早期版本。这确实有效,但它曾经将相机位置设置为其位置,因为我想获得差异并更新每个循环的相机偏移量。此外,正如您在 jsFiddle 中看到的那样,自从更改后它实际上并没有工作,我不确定为什么。
标签: javascript animation math canvas easing