所以我在一個小項目上工作,主要是爲了幫助我學習更好的JavaScript,我遇到了一些問題。我可以做動畫很好,但我的問題是..我試圖找出必要的數學來計算移動每個動畫步驟的像素變化量。所以說我的div是450px寬,我說animate({width:600,duration:2000})。這會留下150px的總移動量,但如果我每3毫秒調用一次setTimeout函數,則每幀的移動量會有多大。我知道這個解決方案可能很簡單,但由於某種原因,也許只是因爲我在寫這篇文章的時候一直在牆上敲打我的頭,現在我還沒有想到弄清楚。如果有人需要,我可以顯示代碼示例。感謝您提前的幫助。 根據要求這裏是我迄今爲止做動畫的代碼...基於時間計算運動
animate : function(params, duration) {
if(!params) {
return this;
} else {
this.current = this._defCurrent;
console.log(this.current);
var time = (duration) ? duration : this.slow;
var target;
for(var index in params) {
if(index == 'queue') {
if(params[index]){
this.animQueue = true;
} else {
this.animQueue = false;
}
} else {
var current = parseFloat(this.getStyle(index));
if(current < params[index]) {
target = params[index] - current;
animDirection = '+';
} else {
target = current - params[index];
animDirection = '-';
}
totalMovement = target/time;
animObj = {type : index, target : target, move : totalMovement, direction : animDirection, duration : time};
this.setAnimQueue(animObj);
}
}
}
this.setTheTimeout();
},
setAnimQueue : function(obj) {
var that = this;
for(var i = 0, amt = (obj.duration * this.fps); i < amt; i++) {
var fun = this.wrapFunction(that.doAnim, this, [obj.type, obj.move, obj.direction]);
this.queue.push(fun);
}
},
setTheTimeout : function() {
var that = this;
this.interValAmt = setInterval(function() {
that.deQueue()
}, this.fps);
},
doAnim : function(type, amount, direction) {
var totalAmount = eval(parseFloat(this[type]()) + direction + amount);
if(this.elem.style[this.toCamelCase(type)]) {
this[type](totalAmount);
} else {
this[type](totalAmount)
}
return this;
}
我們想看看你迄今爲止做了什麼。 – 2012-07-31 04:20:28