Попробуйте:
$("p80").animate({bottom: "+=64px"}, 500, function() {
$(this).css("bottom", 0).appendTo("#b70");
});
По существу, вы анимируете позицию относительно, но перед тем, как анимация завершится, вы перемещаете фигуру в новое место, поэтому теперь она относится к новой локации, а не к старой .
Приведенная выше версия не перемещает фигуру, пока анимация не завершится, что должно решить проблему. animate()
может быть предоставлен обратный вызов для вызова после завершения эффекта.
Кроме того, вам нужно сбросить атрибут, который вы анимируете, когда он окажется в новом месте.
Вот почему он движется вдвое дальше. Это только анимация 64px, но затем вы перемещаете его в другой квадрат, который находится на расстоянии 64px, и он все еще располагается на расстоянии 64px в относительном выражении. 64px + 64px = 128 пикселей Вам нужно сбросить эффект в новом месте.