【发布时间】:2016-02-28 05:24:34
【问题描述】:
使用 setInterval 或 RequestAnimationFrame,我想从 X 和 Y 之间的 lerping 中获取进度值。假设 X 为 0,Y 为 1,我希望它开始时为 0,一半为 0.5,而为 1完成后。
我希望这发生在给定的时间范围内,比如说 5 秒。这意味着当 setInterval/RequestAnimationFrame 达到 2.5 秒时会发生半值 0.5。
最后,我希望它是 pingPong,所以当它达到 5 秒时,值会减少而不是增加,例如 0.9、0.8、0.7 等,然后从 0、0.1、0.2 重新开始...
到目前为止,这是我的代码:
/*
function lerp(start, end, time) {
return start * (1.0 - time) + end * time;
}
*/
function lerp (start, end, amt){
return (1-amt)*start+amt*end;
}
function repeat(t, len) {
console.log('t: ' + t + ', len: ' + len);
return t - Math.floor(t / len) * len;
}
function pingPong(t, len) {
t = repeat(t, len * 2);
return len - Math.abs(t-len);
}
var transitionDuration = 1;
var startTime = Date.now()/1000;
var startPos = 0;
var endPos = 1;
setInterval(function () {
var currentTime = Date.now()/1000;
console.log('currentTime:', currentTime);
var adjustedTime = pingPong(currentTime-startTime, transitionDuration);
var x = lerp(startPos, endPos, adjustedTime);
console.log(Math.abs(x.toFixed(2)));
}, 100);
我该怎么做?
【问题讨论】:
-
你尝试了吗?你在哪里卡住了?
-
详细说明@AramilRey 的问题;你试过什么?你做了什么研究?您能否提供 sn-ps 来证明您实际上已经尝试自己解决问题? (一个简单的谷歌搜索就可以为您提供解决这个问题所需的知识。)您不应该依赖 SO 社区为您完成工作。
标签: javascript lerp