Ich hab das jetzt folgendermaßen (rekursiv) gelöst:
function shake(obj, strongness, dur, speed, direction)
{
if (direction > 0)
obj.style.left = parseInt(obj.style.left) + strongness + "px";
else
obj.style.left = parseInt(obj.style.left) - strongness + "px";
dur -= speed / 1000;
if (dur <= 0)
return;
setTimeout(function(){ shake(obj, strongness, dur, speed, -1*direction); }, speed);
}
Und wird folgendermaßen aufgerufen:
<div onClick="shake(this, 3, 5, 1000, 1)" (...)
Wobei der erste Parameter immer "this" sein muss, der Zweite für die Stärke des Schüttelns, der Dritte für die Dauer und der Vierte für die Geschindigkeit (in Sekunde/1000) steht. Der letzte sollte einen positiven Wert haben (welcher ist egal, z.B. 1).