【发布时间】:2012-06-14 23:01:41
【问题描述】:
首先我想提两件事,一:我的代码并不完美(尤其是 eval 部分) - 但我想为自己尝试一些东西,看看能不能复制jQuery动画功能,所以请原谅我的“坏”做法,也请不要建议我用jQuery,我想试验一下。
二: 这段代码还没有完成,我只是想弄清楚是什么让它工作得不好。
所以动画运行了大约 12 秒,而我输入的持续时间参数是 15 秒,我做错了什么?
function animate(elem, attr, duration){
if(attr.constructor === Object){//check for object literal
var i = 0;
var cssProp = [];
var cssValue = [];
for(key in attr) {
cssProp[i] = key;
cssValue[i] = attr[key];
}
var fps = (1000 / 60);
var t = setInterval(function(){
for(var j=0;j<cssProp.length;j++){
if(document.getElementById(elem).style[cssProp[j]].length == 0){
//asign basic value in css if the object dosn't have one.
document.getElementById(elem).style[cssProp[j]]= 0;
}
var c = document.getElementById(elem).style[cssProp[j]];
//console.log(str +" | "+c+"|"+cssValue[j]);
if(c > cssValue[j]){
document.getElementById(elem).style[cssProp[j]] -= 1/((duration/fps)*(c-cssValue[j]));
}else if(c < cssValue[j]){
document.getElementById(elem).style[cssProp[j]] += 1/((duration/fps)*(c-cssValue[j]));
}else if(c == cssValue[j]){
window.clearInterval(t);
}
}
},fps);
}
}
animate('hello',{opacity:0},15000);
html:
<p id="hello" style="opacity:1;">Hello World</p>
注意:我猜是有问题
(持续时间/fps)*(c-cssValue[j])
setInterval(fps 变量)的部分或/和间隔。
提前致谢。
【问题讨论】:
-
请先删除 eval 部分。使用
var style = document.getElementById(elem).style[cssProp[j]];而不是那个丑陋的 str 建筑物。 -
首先,通过这么多
eval进行调试将非常痛苦。首先清理它...提醒一下,eval("foo("+str+")")与foo(str)相同。而eval("obj."+ propName)与obj[propName]相同。这两条规则应该允许删除那里的几乎所有 eval。 -
eval 用 a 而不是 i 是邪恶的
-
我已经编辑了它,现在没有 evals...有人知道为什么会这样吗?
-
什么是
k?它没有在这个 sn-p 中的任何地方声明或设置。考虑到补间计算的一部分似乎很重要。
标签: javascript setinterval duration