В дополнение к вашему коду и ответу @Edgar Villegas Alvarado, проблема в том, что вы никогда не проверяете, есть ли что-либо, возвращенное .next()
или .prev()
, поэтому ваша рекурсия никогда не закончится, она будет запускать вашу функцию на пустом jQuery объекты каждые 45 мс.
Используйте это:
function doSlide(current, px, pn) {
$(current).animate({
right: px
},200);
var $next = $(current)[pn]('li');
if($next.length){
setTimeout(function(){
doSlide($next, px);
},45);
}
}
doSlide($('ul li:first'), 15, "next");
// or
doSlide($('ul li:last'), 15, "prev");