Посмотрите в консоли браузера.animatethis
ничего не возвращает, что означает, что строка
animatethis.stop();
всегда будет аварийно завершать работу (что-то вроде «TypeError: Невозможно вызвать метод stop из undefined))Вы также смешиваете порядок анимации в complete
обратном вызове.
Остановитесь, вдохните и подумайте о том, что на самом деле делает ваш код выше.поэтому после увеличения marginLeft
вы хотите уменьшить его. Тогда Вы хотите начать все сначала.Правильно?Итак:
function animatethis(targetElement, speed) {
$(targetElement).animate({ marginLeft: "+=250px"},
{
duration: speed,
complete: function ()
{
targetElement.animate({ marginLeft: "-=250px" },
{
duration: speed,
complete: function ()
{
animatethis(targetElement, speed);
}
});
}
});
};
animatethis($('#q1'), 5000);
Есть много других способов снять шкуру с этой кошки, но это работает.http://jsfiddle.net/mattball/rKu6Y/