//つづき
animation: function(e, p, cnt) {
var c = 0, i, s = e.style;
var tId = setInterval(function() {
for (i in p) s[i] = (p[i](c) | 0) + "px";
if (++c > cnt) {
clearInterval(tId);
e = p = s = tId = null;
}
}, 30);
},
setParam: function(p, opt, arg) {
var start, end, t;
start = this.getStyle(arg.element, p);
if (start===null) return; else start = parseInt(start);
end = start * opt.rate || +opt.value;
if (end===undefined || isNaN(end)) return;
t = opt.transition;
if (!this.trans[t]) t = "linear";
arg.param[p] = this.trans[t](start, end, arg.count);
},
trans: {
linear: function(s, e, cnt) {
var d = e-s;
return function(c) {return c*d/cnt+s;}
},
sin: function(s, e, cnt) {
var d = e-s, pi=Math.PI/2;
return function(c) {return d*Math.sin(c*pi/cnt)+s;}
},
cos: function(s, e, cnt) {
var d = e-s, pi=Math.PI/2;
return function(c) {return e-d*Math.cos(c*pi/cnt);}
}
},
define: function(id, option, time) {
var elm = document.getElementById(id);
if (!elm) return;
var opt, p, arg = {};
var i = 0, cnt = time/30 | 0;
if (cnt <= 0) cnt = 1;
arg.element = elm, arg.count = cnt, arg.param = {};
for (p in option) {
opt = option[p];
switch (this.propertys[p]) {
case 1:
this.setParam("width", opt, arg);
this.setParam("height", opt, arg);
break;
case 2:
this.setParam(p, opt, arg);
break;
default:
}
}
p = arg.param, arg = null;
this.animation(elm, p, cnt);
}
}
// defineの引数
// id, { property:{rate/value:value, [transition:type]}, ・・・}, 時間(msec)
//
function test() {
Animator.define("imageA", {
size:{rate:4, transition:"linear"},
left:{value:600, transition:"sin"},
top:{value:500, transition:"cos"}
}, 5000);
Animator.define("imageB", {
width:{value:300, transition:"sin"},
left:{value:0},
top:{value:600}
}, 2500);
test = new Function;
}
//-->
</script>
</body>
</html>
お礼
fujillinさんへ 大変有難うございます。 頂いたサンプルで、正に確認したいと望んでいた事を、確認させて頂く事が出来ました。 Firefoxの件に関しては、画像を指定しなかった場合に、IEだと画像の枠(四角の中に赤い×印が描いてある)が表示されて動きがブラウザで確認できるのですが、Firefoxだとその枠が表示されないので何か不具合なのかと戸惑っておりました。ちゃんと画像を指定したらFirefoxでも表示されました。 何度も質問してしまい、本当にお手数をお掛け致しました。御回答頂きまして、真に有難うございました。