First of all, as noted in the comments, make sure that multiple timers are running at the same time. Then, without forcing to offsetLeftpay each time, can also offer quite acceleration.
function moveX(object, coord) {
var v = coord < 0 ? -1 : 1;
var x = object.offsetLeft;
var timer = setInterval(function () {
x += v;
v *= 2;
if ((v < 0 && x > coord) || (v > 0 && x < coord)) {
object.style.left = x + "px";
} else {
clearInterval(timer);
object.style.left = coord + "px";
}
}, 25);
}
In addition, your movement depends on how long it takes for the timer; any performance differences can be smoothed out by using only time (although you cannot do it correctly in IE 8, there is no monotonous API timer):
function moveX(object, coord) {
var v = coord < 0 ? -1 : 1;
var startX = object.offsetLeft;
var start = new Date().getTime();
var timer = setInterval(function () {
var t = new Date() - start;
var x = startX + v * Math.pow(2, t / 25);
if ((v < 0 && x > coord) || (v > 0 && x < coord)) {
object.style.left = x + "px";
} else {
clearInterval(timer);
object.style.left = coord + "px";
}
}, 25);
}
.