さて、私はいくつかのアニメーションをしようとしています。これがテストページです。
かなりの量のコードがあり、それはすべて関連性があると思うので、ここに貼り付ける価値はないかもしれません。関数定義を投稿できます:
var ImageLoader = function(c,imagelist,oncomplete) {
var l = 0, imgs = [], i, loaded = 0;
for( i in imagelist) {
l++;
imgs[i] = new Image();
imgs[i].style.position = "absolute";
imgs[i].style.left = "100%";
c.appendChild(imgs[i]);
imgs[i].onload = function() {
loaded++;
if( loaded == l) oncomplete(imgs);
};
imgs[i].onerror = function() {
alert("Failed to load "+this.src);
};
imgs[i].src = imagelist[i];
}
};
var img2bg = function(c,img) {
var d = document.createElement('div');
d.style.width = img.width+"px";
d.style.height = img.height+"px";
d.style.backgroundImage = "url('"+img.src+"')";
d.style.position = "absolute";
d.style.left = "100%";
c.appendChild(d);
return d;
};
var Animate = function(callback,time,thenwhat) {
var start = new Date().getTime();
var timer = window.setInterval(function() {
var now = new Date().getTime();
var pos = Math.min(1,(now-start)/time);
if( callback) callback(pos);
if( pos == 1) {
clearInterval(timer);
if( thenwhat) thenwhat();
}
},25);
};
ただし、前述したように、これだけではおそらくあまり役に立ちません。
とにかく、要点を言えば、このアニメーションはIE9、IE10、Chrome、Firefoxで完全に機能します...しかし、IE8と7では悲惨に失敗します。
のコールバック関数で、 2つの特定の画像ImageLoader
を呼び出します。img2bg
しかし、何らかの理由で、関数は画像の1つに対して2回呼び出され、2番目の引数がまったくない状態で4〜5回呼び出されています。スクリプト全体に文字通り他の呼び出しはありませんがimg2bg
、何が得られますか?