まず最初に、2つのことを述べたいと思います
。1つ:私のコードは完璧ではありません(特に評価部分)-しかし、私は自分自身のために何かを試し、jQueryアニメーション関数を複製できるかどうかを確認したかったので、許してください「悪い」慣行です。jQueryを使用することを提案しないでください。実験したかったのです。
2:このコードはまだ完成していないので、何がうまく機能しないのかを知りたかっただけです。
したがって、入力した期間パラメータが15秒であるのに対し、アニメーションは約12秒間実行されます。何が問題なのですか?
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>
注:問題があると思います
(duration / fps)*(c-cssValue [j])
setInterval(fps変数)の一部または/および間隔。
よろしくお願いします。